公司动态

小白嵌入式学习-使用stm32103c8t6

📅 2026/8/3 9:48:10
小白嵌入式学习-使用stm32103c8t6
按钮实验思路使用推挽模式对输入寄存器GPIO PA1存入01值通过史密斯将高低电平转化为01如果读取GOIO引脚PA1的数值为0按钮按下电路接地输出0反之输出1Stm32读取到PA1的数值后对PA0输出高低电平使对应PMOS/nMOS管导通从而达到按下按钮灯亮松开灯灭效果代码以及注释#include stm32f10x.hint main(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟GPIO_InitTypeDef GPIO_Initstruct {0};//结构体定义GPIO_Initstruct.GPIO_Pin GPIO_Pin_0;//选择PA0引脚GPIO_Initstruct.GPIO_Mode GPIO_Mode_Out_PP;//输出推挽模式GPIO_Initstruct.GPIO_Speed GPIO_Speed_2MHz;//输出速率2MHZGPIO_Init(GPIOA,GPIO_Initstruct);//初始化PA0GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//向PA0输入高电平pmos管导通灯亮GPIO_Initstruct.GPIO_Pin GPIO_Pin_1;//选择PA1引脚GPIO_Initstruct.GPIO_Mode GPIO_Mode_IPU;//选择输入上拉模式GPIO_Init(GPIOA,GPIO_Initstruct);//初始化PA1while(1){if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) Bit_RESET)//如果读取GOIO引脚PA1的数值为0按钮按下电路接地输出0{GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//对PA0输出一个高电平是Pmos推挽电路导通灯亮}else{GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//否则对PA0输出一个低电平是Pmos推挽电路接地灯灭}}}中间遇到问题1.灯无法正常亮使用万用表切到蜂鸣挡位查看电路均导通硬件问题排查后查看代码问题原因为使能时钟函数用错红色函数处前期编写错误使用RCC_APB1导致时钟没有开启后续对GPIO的操作都无效