物联网智能家居实战-基础班第3节(时钟与GPIO)
作者:互联网
前言:以下内容基于 百问网 黄老师的 7天实战训练的个人总结
第3节主要学习了基于STM32F103C8T6的时钟,GPIO的配置,以及按键程序的编写:
1、时钟的配置:
查询STM32F103C8T6的芯片规格书,里面有关于时钟树的说明,包括:
HSE:外部高度时钟:通过外部引脚OSC_IN,OSC_OUT可外接4~16M的晶振实现。
HSI:内部高速时钟:不需要外接晶振即可产生8M的时钟
LSI:内部低速时钟:不需要外接晶振即可产生40K的时钟
LSE:外部低速时钟:通过外部引脚OSC32_IN,OSC32_OUT可外接32.768K的晶振实现。
比如按开发板上配置的HSE为8M晶振,可以在STM32CubeMX中进行可视化的配置,将HSE由Disable改为如下配置,然后右侧芯片相应引脚会自动配置完成 。
可以通过Clock Configuation对时钟进行配置,使用内部时钟最高配置到64M,用外部时钟最高配置到72M。图左边是各种时钟源(LSE,HSI,HSE,LSI)的配置,右边是挂载不同外设的时钟频率。APB1所用IO最多配置到36M,APB2最高可以配置到72M
配置完成后生成CODE,打开工程后可以发现,关于时钟的相关配置已设置好。包括GPIO的使能。
2、STM32F103C8T6有2组GPIO,每组16个。PA0~15和PB0~15。GPIO支持8种工作模式,输入4种,输出4种。
推挽输出(Push-Pull):相当于使用芯片的供电端VDD与VSS,P-MOS与N-MOS结合控制IO口的输出是高还是低。
开漏输出(Open-Drain):相当于去除P-MOS,一般情况下需要外接上拉电阻VCC与VSS,来控制IO口的电平高低。
上拉输入(Input Pull-up):相关于VDD的开关闭合,VSS的开关断开,给IO稳定的高电平状态。
下拉输入(Input Pull-down):相关于VDD的开关断开,VSS的开关闭合,给IO稳定的低电平状态。
3、按键输入设计:
先设计原理图,把轻触开关KEY与MCU的11脚PA0连接。C15为硬件消抖。
在STM32CubeMX中进行配置,将PA0设置为Input mode, 然后生成CODE并打开。
KEIL打开工程文件,相应的配置已经更新进去了。
添加功能,当按下KEY时LED灯亮,当抬起KEY时LED灯灭。代码如下:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(GPIO_PIN_RESET== (KEY_GPIO_Port,KEY_Pin)) //当按键被按下
{
HAL_Delay(8); //消抖 8ms
if(GPIO_PIN_RESET== (KEY_GPIO_Port,KEY_Pin)) //再次判断按键被按下
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//点亮LED灯
}
else
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); //否则熄灭LED灯
}
}
连接开发板,开关到OFF,打开烧录工具加载文件“开始下载 ”后将程序下载到开发板里,按下抬起KEY 时观察LED的变化。
本篇总结完成,内容学习及部分配图源于百问网相关教程
标签:PIN,配置,智能家居,晶振,KEY,GPIO,时钟 来源: https://blog.csdn.net/weixin_45814425/article/details/123197579