stm32 随笔
1. GPIO
上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平,下拉电阻它是为了保证无信号输入时输入端的电平为低电平。就是输入恒置零和置一。
推挽输出模式,在该结构中输入高电平时,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。
你在用IO输出时写的值(0或1)你肯定希望直接对应输出口的高低电平 所以写1一定要P导通,写0一定要N导通
STM32的8种GPIO输入输出模式深入详解
https://blog.csdn.net/baidu_37366055/article/details/80060962
对stm32寄存器的理解
https://www.cnblogs.com/cjyc/p/6628783.html
GPIOB 使能 端口时钟是什么意思
https://www.csdn.net/tags/NtjaEg1sOTUxMTQtYmxvZwO0O0OO0O0O.html
2.跑马灯实验 可以理解为:STM32 如何对几个GPIO引脚进行单独操作
https://www.csdn.net/tags/OtTacg1sODUxNzItYmxvZwO0O0OO0O0O.html
1.gpio先是使能时钟rcc.h下的RCC_APB2PeriphClockCmd函数,看他参数咋配置的
stm32min看硬件图发现与LED相关的是PA8和PD2所以写
RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD
任何另一个参数进去看,选ENABLE
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟
2.调用gpio初始化函数
在 GPIO.h下去找 GPIO_Init函数
GPIO_Init(GPIOD,&GPIO_InitStructure);
看 GPIO_Init所需的参数,然后对于结构体是写取地址&,并单独定义
GPIO_InitTypeDef GPIO_InitStructure;取看结构体里面参数怎么写,对照硬件图是PA8和PD2 所以pin写8, 和2.模式选择推挽
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
3.设置输出高低电平
让灯不亮设置默认为高电平。
GPIO_SetBits( GPIOA, GPIO_Pin_8);
GPIO_ResetBits(GPIOA, GPIO_Pin_8);
3.跑马灯实验_寄存器版本
一样的,配置时钟使能,初始化gpio,高低电平;
4.按键输入
先上硬件图
KEY库函数 GPIO_ReadInputDataBit 按键按了的输入
#define KEY0 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)//读取按键0
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)//读取按键1
#define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键2
GPIO_PinRemapConfig函数 改变指定管脚的映射,实现引脚功能复用,把MCU I/O口的资源端口设置为普通I/O口
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
设置key ,有个按键模式 static来判断
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY00||KEY10||WK_UP1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY00)return KEY0_PRES;
else if(KEY10)return KEY1_PRES;
else if(WK_UP1)return WKUP_PRES;
}else if(KEY01&&KEY11&&WK_UP==0)key_up=1;
return 0;// 无按键按下
然后初始化led
main函数里面写按键按下的对应led邓亮灯逻辑。
注意看哈他源码,可以看出为啥他的KEY0==0