HAL库LED点灯

一. 了解并掌握HAL库函数开发方法。使用stm32CubeMX配合Keil练习
1、用GPIOA端口4,5,6引脚完成LED灯的周期闪烁。

打开stm32CubeMX后,选择file,选择new project,创建新工程
在这里插入图片描述
在Commercial Part Number处输入stm32f103c8t6,在右下角MCUs/MPUs List处下面双击stm32f103c8t6
在这里插入图片描述
在Pinout & Configuration下找到System Core,单点SYS,将Debug选为Serial Wire
在这里插入图片描述
再选择RCC,选择High Speed Clock (HSE)为CrystalCeramic Resonator
在这里插入图片描述
在右下角的Pinout view中,找到PA4,PA5,PA6的引脚,依次左键选择GPIO_Output
在这里插入图片描述
将PA4,PA5,PA6的GPIO output level依次选择为High
在这里插入图片描述

选择Clock Configuration,将system Clock Mux,PLL,APB1 Prescaler里的参数一次修改如下图
在这里插入图片描述
选择Project Manager的Project模块补充Project Name和Toolchain Folder Location,在Toolchain /IDE中选择MDK-ARM,Min Version选择V5.32(根据自己的keil-5软件版本进行选择),取消Firmware Package Name and Version后面的小勾,选择STM32Cube FW_F1V1.8.0的包(根据自己下载的STM32F1的包版本进行选择)
在这里插入图片描述
在Code Generator的Generated files一栏中勾选Generate peripheral initialization as a pair of ‘.cl.h’ files per peripheral,最后点击GENERATE CODE就可以生成keil文件了
在这里插入图片描述
在生成的keil文件中,找到main.c,在int main(void)里的while循环里编辑以下代码,编译,烧录。

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); 
HAL_Delay(1000); 
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);  
HAL_Delay(1000); 
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);  
HAL_Delay(1000); 
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);  
HAL_Delay(1000); 
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET); 
HAL_Delay(1000); 
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); 
HAL_Delay(1000); 

实物图:
在这里插入图片描述

2、接上,再用GPIOB端3,4,5管脚接3个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,对应的LED灯停止工作(即停止周期性闪烁),接低电平时,恢复工作。

对EXIT配置:
在这里插入图片描述
在NVIC中勾选
在这里插入图片描述
在生成的keil文件里找到stm32f1xx_hal_gpio.c,再把
weak_void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
更改为
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),把函数内容更改为如下代码:

if(GPIO_Pin == GPIO_PIN_3){
GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3);
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); 
else
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);  
}

	
if(GPIO_Pin == GPIO_PIN_4){
GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4);
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); 
else
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);  
}
	
	
if(GPIO_Pin == GPIO_PIN_5){
GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5);
if(pinState==GPIO_PIN_RESET)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); 
else
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);  
}

实物图:
在这里插入图片描述

二. 在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察LED管脚的时序波形,分析按键中断时,LED灯的波形变化情况。

当按键中断时,对应管脚为高电平,控制的LED管脚变为高电平。
在这里插入图片描述

4.总结

好学。

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值