小白嵌入式学习-使用stm32103c8t6

📅 2026/8/3 10:02:23 👁️ 阅读次数 📝 编程学习
小白嵌入式学习-使用stm32103c8t6

按钮实验

思路:使用推挽模式,对输入寄存器GPIO PA1存入01值(通过史密斯将高低电平转化为01)

如果读取GOIO引脚PA1的数值为0(按钮按下,电路接地,输出0,反之输出1)

Stm32读取到PA1的数值后,对PA0输出高低电平,使对应PMOS/nMOS管导通,从而达到按下按钮灯亮,松开灯灭效果

代码以及注释:

#include "stm32f10x.h"

int 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;//输出速率2MHZ
GPIO_Init(GPIOA,&GPIO_Initstruct);//初始化PA0

GPIO_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);//初始化PA1

while(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的操作都无效