文章内容:
用stm32F103核心板的GPIOA端一管脚接一个LED,GPIOB端口一引脚接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。并用中段完成一个STM32的USART串口通讯程序
目录
1.中段
1.1含义
CPU 暂时停下现行程序的执行,转向为临时发生的事件进行处理,处理完后,再返回执行原程序。中断是一种在发生了一个外部的事件时调用相应的处理程序(或称服务程序)的过程。中断服务程序与中断时CPU正在运行的程序是相互独立的,相互不传递数据。
1.2中段过程
1.3作用
1、抢占式优先级
2、响应式优先级
抢占式优先级的特点是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。
2.使用中断方式点亮LED
2.1CubeMX生成工程
创建新工程
选择 STM32F103C8 芯片,点击 Start Project 进入工程即可
配置系统调试接口 SYS,选择 Serial Wire
配置外设 RCC ,选择 HSE (外部高速时钟)为 Crystal/Ceramic Resonator
2.2GPIO
选择 LED 灯引脚 PA5,设置引脚为输出模式 GPIO_Output
选择作为外部中断的引脚 PB1,设置为与中断线 GPIO_EXTI15 连接
将 GPIO_PA5 命名为 R
将 GPIO_PB1 命名为 ZDUAN,触发方式选择下降沿触发 ,选择上拉电阻
选择NVIC
设置中断优先级
设置时钟
最后生成keil5工程
3.烧录程序
3.1添加代码
代码如下
/*
* @brief EXTI line detection callbacks.
* @param GPIO_Pin: Specifies the pins connected EXTI line,
* @retval None
*/
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if( GPIO_Pin == ZDUAN_Pin )
{
HAL_GPIO_TogglePin(R_GPIO_Port, R_Pin);
}
}
3.2烧录程序
3.3效果展示
注:由于没有开关,只好通过线接地与不接地来代替开关进行中段操作
4.串口通信
4.1建立工程
先新建工程,步骤同上
设置RCC
设置SYS
选择UASRT1,将mode改为异步通信,选择下面的NVIC Setting
创建工程同上
4.2代码
首先自己定义一个数组的长度用来放置所传输的数据
uint8_t OT_RxBuffer;
uint8_t Uart1_RxBuff[1000];
uint8_t Uart1_Rx_Cnt = 0;
编写接受函数
HAL_UART_Receive_IT(&huart1, (uint8_t *)&OT_RxBuffer, 1);
使能函数以及发送函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be implemented in the user file
*/
Uart1_RxBuff[Uart1_Rx_Cnt++] = OT_RxBuffer; //??????
if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D))
{
HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF);
Uart1_Rx_Cnt = 0;
//memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&OT_RxBuffer, 1);
}
编译程序
4.3烧录程序
最终结果如下
五总结
通过本次实验,我用CUbeMX实现了灯的亮灭和用中段的方式实现串口通信,了解了中段的一些相关知识
六参考资料
初学STM32:基于CubeMX利用中断实现LED及串口通信_Lc-Yusheng的博客-CSDN博客
HAL 库 STM32CubeMX 实现 LED 亮灭----中断模式_L-GRAZY的博客-CSDN博客
STM32新手必看 简单几步用cubeMX完成按键的外部中断控制灯的亮灭(STM32F103RCT)_ZCHHHHHHH12的博客-CSDN博客_stm32外部中断控制led灯亮灭