一、中断
数据输出方式:
中断过程: 中断程序执行过程: 中断的作用:
1.可以解决快速的CPU与慢速的外部设备之间的传送数据的矛盾。 2.CPU可以分时为多个外部设备服务,提高计算机的利用率。 3.CPU能够及时处理应用系统的随机事件,增强系统的实用性。 4.CPU可以处理设备故障及掉电等突发事件,提高系统可靠性。
中断优先级:
1.可以解决快速的CPU与慢速的外部设备之间的传送数据的矛盾。 2.CPU可以分时为多个外部设备服务,提高计算机的利用率。 3.CPU能够及时处理应用系统的随机事件,增强系统的实用性。 4.CPU可以处理设备故障及掉电等突发事件,提高系统可靠性。
中断优先级:
处理器根据不同中 断的重要程序设置 不同的优先等级。 不同优先级中断的 处理原则是:高级 中断可以打断低级 中断;低级中断不 能打断高级中断。
中断向量:
二.HAL库中断点亮LED灯
1.创建项目 找到PB5,选择为GPIO——EXTI5中断模式 PA1引脚设置
开启中断
RCC配置:配置时钟源为外部时钟源 时钟树设置
项目管理 生成代码,打开project,在项目代码中,打开stm32f1xx_hal_gpio.c文件可以找到中断服务函数 在main.c文件中添加如下代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
}
三.HAL库中断串口通信
CubeMX配置:
配置USART1为异步通信模式:
配置串口:
生成代码,打开项目,在main.c中添加定义
uint8_t aRxBuffer;
uint8_t Uart1_RxBuff[256];
uint8_t Uart1_Rx_Cnt = 0;
uint8_t cAlmStr[] = "数据溢出(大于256)\r\n";
在main函数如下位置处添加代码:
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
``
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
if(Uart1_Rx_Cnt >= 255)
{
Uart1_Rx_Cnt = 0;
for(int i=0;i<255;i++)
{
Uart1_RxBuff[i]=0;
}
HAL_UART_Transmit(&huart1, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);
}
else
{
Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;
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;
for(int i=0;i<255;i++)
{
Uart1_RxBuff[i]=0;
}
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
}
c
调试结果
四.总结
程序设置中断可以灵活处理事务,将更紧急的事务优先处理。
五.参考链接
https://blog.csdn.net/weixin_46628481/article/details/121056373
https://blog.csdn.net/cayloon/article/details/79196942
|