实验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的效果。先看原理图,确认LED的接口和点亮电平。LED部分电路如下:
对应单片机的接口为PC15、PA1、PA2,然后看独立按键部分的原理图:
独立按键对应单片机的接口为PA3、PA4,原理图如下:
接下来打开STM32CUBEMX,进行相应操作:
1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:
参照实验1,芯片选择“STM32F103C8”。
打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。
选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。
2、配置IO。先配置LED的IO,PC15,PA1。因为独立按键只有两个,所以这里只选两个LED,分别命名为D1、D2。以PC15为例,找到后,使用鼠标左键点击,在弹出的菜单中选择“GPIO-Output”,配置该管脚的工作模式:
然后配置独立按键的GPIO,分别是PA3和PA4。以PA3为例,找到后,使用鼠标左键点击,在弹出的菜单中选择“GPIO-Iutput”,配置该管脚的工作模式:
再用鼠标右键点击该管脚,选择“Enter User Label”,在弹出的对话框中输入“KSTA”,然后敲回车。这样,完成了对该管脚工作模式的配置,同时给它起了一个名字“KSTA”方便在程序中进行快捷操作。
PA4同上。
3、上拉电阻配置。为了配合按键检测功能,需要开启GPIO内部自带的上拉电阻,如图。依次点击位置1中的“System Core”内的GPIO,然后选择位置2中的PA3,接着在位置3选择“Pull-up”。
PA4同上。
4、时钟配置。默认配置为外部高速晶体,通过PLL倍频到72MHZ。
5、生成工程。参照实验1的步骤7,进行相应配置,生成工程文件。
6、修改工程。在主函数的while(1)循环中,添加如下代码:
if(HAL_GPIO_ReadPin(K_STA_GPIO_Port,K_STA_Pin) == 0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(K_STA_GPIO_Port,K_STA_Pin) == 0)
{
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
while(HAL_GPIO_ReadPin(K_STA_GPIO_Port,K_STA_Pin) == 0);
}
}
if(HAL_GPIO_ReadPin(K_SEL_GPIO_Port,K_SEL_Pin) == 0)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(K_SEL_GPIO_Port,K_SEL_Pin) == 0)
{
HAL_GPIO_TogglePin(D2_GPIO_Port,D2_Pin);
while(HAL_GPIO_ReadPin(K_SEL_GPIO_Port,K_SEL_Pin) == 0);
}
}
位置如下:
修改后,保存,编译、下载,重新上电,每按一下按键,LED的状态翻转一次。