STM32学习笔记(4)——点亮一个LED
这一章我们通过直接控制IO的方式来点亮一个LED。
首先新建一个CubeMX工程,选择对应的芯片,选择对应下载方式,配置工程名字,下载器等,可参考熟悉工作环境这一章节。
基础工程建立完成之后,我们来继续对基础工程进行配置,首先配置时钟:
这里配置为外部时钟,晶振输入。通常使用的开发板都是外部8M晶振输入。STM32官方的Nuclo并不是如此,如果你使用的是Nuclo系列的开发板应该选择旁路时钟输入,因为Nuclo系列开发板为板载的STlink提供时钟。这里推荐电子科技大学的网络课程:www.icourse163.org/course/UESTC-1207429802
接着来到Clock Configuration时钟树页面:
仔细看可以发现,这个页面和之前第三章附上的datasheet中时钟树的图一摸一样,其中有些地方是灰色的,不能选中,这是因为在之前的配置中没有打开它。这里由于我们之前配置了外部晶振输入,因此这里的HSE变蓝色了可以选中修改频率,将其修改为实际外部晶振的频率8M。接着在PLL锁相环的输入中选中HSE,系统时钟的输入中选择PLL锁相环输入,这个时候默认的参数就会出现问题,一部分时钟将会变红,点击正上方的Resolve Clock Issues,自动修正参数,最终时钟树配置如下:
然后回到Pinout页面,右侧有一个Pinout view,显示有芯片以及管脚,根据开发板原理图上LED灯的电路来确定是哪一个IO连接上LED,并且确定是高电平点亮还是低电平点亮。这里假设PC13连接上LED,并且为低电平点亮。那么在Pinout view里选中PC13,选择GPIO_Output模式:
配置初始化为高电平,推挽模式,配置上拉电阻。然后生成代码,打开工程。
在USER CODE 3区域书写代码。这里要用到对IO输出进行控制的函数:HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),这个函数包含两个型参一个是端口ABCD,另一个是引脚序号1,2,3……。每运行一次这个代码对应的端口引脚就会翻转一次电平,由0到1,或者由1到0。
为了控制闪灯的频率,还要使用HAL库自带的延时函数:HHAL_Delay(uint32_t Delay)。这个函数只有一个形参,这个形参代表延时多少微秒,这里我选择500,那么LED将会以1Hz的频率进行闪烁:
编译,下载就可以看到PC13连接的LED正在闪烁了。
这里缺少实物,因此我使用仿真的方式来模拟闪灯:
当运行仿真时,可以观察发现GPIOC的ODR在做有规律的变化,通过datasheet就可以知道这是PC13的输出正在进行高低翻转,仿真说明结果是正确的。