前言:
1、软件:keil5,STM32CubeMX
2、STM32板子:STM32F103VET6
4、按键管脚:PA0 PC13
5、LED管脚: PB0 PB1 PB5
文章目录
- 怎么用外部中断点灯?
-
- 1.知道原理:
- 2.配置STM32CubeMX:
- 3.你要写的代码:
- 4.实现的效果:
- 具体过程:
- 1.配置CubeMX
-
-
- 1.打开软件
- 2.选择板子类型
- 3.选择serial wire:
- 4.选择外部时钟:
- 5.选择GPIO的IO口:
- 6.打开外部中断:
- 7.文件名和选择文件地址:
-
- 2.在keil中编写代码实现功能:
-
-
- 1.配置keil
- 2.写代码:
-
怎么用外部中断点灯?
1.知道原理:
绿灯的io口是PB0,蓝灯的io口是PB1,红灯的io口是PB5,外部中断按键KEY1:PA0,外部中断按键KEY2:PC13,
当按键按下PA0或者PC13IO口输入高电平,检测到上升沿,或者松开检测到下降沿,使PB0,PB1,PB5,IO口为低电平就能点亮
2.配置STM32CubeMX:
找到LED的IO口配置为高电平(输出模式),找到按键的IO口配置(外部中断模式)。
3.你要写的代码:
我这里用KEY1和KEY2来控制绿灯蓝灯切换。
void Delay(unsigned int i)//延时
{
while(i--);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_0)
{
Delay(100);/* 延时一小段时间,消除抖动 */
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==SET)
{
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_SET);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
}
if(GPIO_Pin==GPIO_PIN_13)
{
Delay(100);/* 延时一小段时间,消除抖动 */
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==SET)
{
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_SET);
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_RESET);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
}
}
4.实现的效果:
具体过程:
1.配置CubeMX
1.打开软件
2.选择板子类型
3.选择serial wire:
用于DAP和J-Link做下载
4.选择外部时钟:
高速时钟(HSE)选择外部晶振
5.选择GPIO的IO口:
按键管脚:PA0 PC13 (EXTI模式)
LED管脚: PB0 PB1 PB5(输出模式)
模式:
上升沿触发的外部中断
下降沿触发的外部中断
上升/下降沿触发的外部中断
上升沿触发的事件中断
下降沿触发的事件中断
上升/下降沿触发的事件中断
6.打开外部中断:
7.文件名和选择文件地址:
建议用英文名
2.在keil中编写代码实现功能:
1.配置keil
2.写代码:
只能在begin和end之间写代码,不然再次启动CubeMX会把写在begin和end外的代码覆盖掉(删掉)
/* USER CODE BEGIN 1 */
void Delay(unsigned int i)//延时
{
while(i--);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_0)
{
Delay(100);/* 延时一小段时间,消除抖动 */
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==SET)
{
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_RESET);
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_SET);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
}
if(GPIO_Pin==GPIO_PIN_13)
{
Delay(100);/* 延时一小段时间,消除抖动 */
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==SET)
{
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_SET);
HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_RESET);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
}
}
/* USER CODE END 1 */
点击下载就能通过按键点亮灯了!!!
最后:
要自己写一个短暂的延时
void Delay(unsigned int i)
{
while(i--);
}
不能用库的延时
HAL_Delay (1000);
不然会卡死。