实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样
本实验通过配置STM32CUBEMX工具,实现外部中断检测按键,然后控制LED的效果。和实验2的区别在于,实验2需要系统循环检测GPIO的关键状态,耗费系统资源;而实验3通过外部中断检测,配置好之后就可以去做别的事了。
步骤如下:
1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:
参照实验1,芯片选择“STM32F103C8”。
打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。
选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。
2、配置IO。LED部分和实验2一样,配置PC15,PA1,并命名为D1、D2。
按键部分,分别是PA3和PA4。以PA3为例,找到后,使用鼠标左键点击,在弹出的菜单中选择“GPIO_EXTI3”,配置该管脚的工作模式:
再用鼠标右键点击该管脚,选择“Enter User Label”,在弹出的对话框中输入“KSTA”,然后敲回车。这样,完成了对该管脚工作模式的配置,同时给它起了一个名字“KSTA”方便在程序中进行快捷操作。
PA4同上。
3、配置中断检测边沿。当按键被按下的时候,相应IO上的电平从高电平变成低电平,所以我们需要让中断系统监测的是一个从高到低的跳变,也就是一个下降沿。如图:
位置1选中“GPIO”,位置2选中PA3,位置3分别选择“External Interrupt Mode with Falling edge trigger detection”和“Pull-up”。
PA4同上。
4、中断配置。使能相应中断,如图:
先点击左侧的“NVIC”,然后在右侧的NVIC栏里,选中“EXTI line3 interrupt”和“EXTI line4 interrupt”,确保中断使能被打开。
然后点击“Code generation”,在下图红框位置,确保选中。
5、时钟配置。参照实验1.
6、生成工程。参照实验1的步骤7,进行相应配置,生成工程文件。
7、修改工程。在“/* USER CODE BEGIN 4 */”下面,添加如下代码:
/**
* @brief This function handles EXTI interrupt request.
* @param GPIO_Pin: Specifies the pins connected EXTI line
* @retval None
*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if (GPIO_Pin == K_STA_Pin)
{
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
}
if(GPIO_Pin == K_SEL_Pin)
{
HAL_GPIO_TogglePin(D2_GPIO_Port,D2_Pin);
}
}
位置如下:
修改后,保存,编译、下载,重新上电,每按一下按键,LED的状态翻转一次。
整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。