stm32 随笔

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(KEY0
0)return KEY0_PRES;
else if(KEY10)return KEY1_PRES;
else if(WK_UP
1)return WKUP_PRES;
}else if(KEY01&&KEY11&&WK_UP==0)key_up=1;
return 0;// 无按键按下

然后初始化led

main函数里面写按键按下的对应led邓亮灯逻辑。

注意看哈他源码,可以看出为啥他的KEY0==0

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值