物联网智能家居实战-基础班第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的晶振实现。

物联网智能家居实战-基础班第3节(时钟与GPIO)比如按开发板上配置的HSE为8M晶振,可以在STM32CubeMX中进行可视化的配置,将HSE由Disable改为如下配置,然后右侧芯片相应引脚会自动配置完成 。

 

物联网智能家居实战-基础班第3节(时钟与GPIO)

可以通过Clock Configuation对时钟进行配置,使用内部时钟最高配置到64M,用外部时钟最高配置到72M。图左边是各种时钟源(LSE,HSI,HSE,LSI)的配置,右边是挂载不同外设的时钟频率。APB1所用IO最多配置到36M,APB2最高可以配置到72M

物联网智能家居实战-基础班第3节(时钟与GPIO)

配置完成后生成CODE,打开工程后可以发现,关于时钟的相关配置已设置好。包括GPIO的使能。

物联网智能家居实战-基础班第3节(时钟与GPIO)

 物联网智能家居实战-基础班第3节(时钟与GPIO)

 2、STM32F103C8T6有2组GPIO,每组16个。PA0~15和PB0~15。GPIO支持8种工作模式,输入4种,输出4种。

 物联网智能家居实战-基础班第3节(时钟与GPIO)

物联网智能家居实战-基础班第3节(时钟与GPIO)

 

推挽输出(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节(时钟与GPIO)

 3、按键输入设计:

先设计原理图,把轻触开关KEY与MCU的11脚PA0连接。C15为硬件消抖。

 

物联网智能家居实战-基础班第3节(时钟与GPIO)

在STM32CubeMX中进行配置,将PA0设置为Input mode, 然后生成CODE并打开。

物联网智能家居实战-基础班第3节(时钟与GPIO)

KEIL打开工程文件,相应的配置已经更新进去了。

物联网智能家居实战-基础班第3节(时钟与GPIO)

 添加功能,当按下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的变化。

物联网智能家居实战-基础班第3节(时钟与GPIO)

 本篇总结完成,内容学习及部分配图源于百问网相关教程

 

上一篇:LINUX设备驱动模型之PLATFORM(平台)总线详解


下一篇:快速实现一个室内空气质量检测仪