文章目录[隐藏]
一、原理介绍
(一)中断系统
(二)串口通信
二、STM32中断模式控制LED灯
1.新建STM32CubeMX工程(步骤与以往相同)
2.选择PA4设置为GPIO_Output输出模式,PB9设置为GPIO_EXTI9中断模式。
输出:
中断:
3.配置RCC和SYS。
RCC:
SYS:
4.配置PA4与PB9
PA4:
PB9:
5.开启中断
6.时钟树设置
7.选择路径——生成代码——打开至Keil
8.修改代码
在main.c中加入以下代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13); //翻转电平
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
9.编译并烧录运行
烧录时BOOT0置1,BOOT1置0
三、串口中断方式进行串口通信
1.新建STM32CubeMX工程
2.选择USART1位异步通信模式
3.RCC与SYS配置
4.串口配置:
波特率为115200 Bits/s
传输数据长度为8 Bit
奇偶检验无
停止位1 接收和发送都使能
5.设置使能中断
6.修改代码
在main.c中加入头文件:
uint8_t aRxBuffer;//接收缓冲中断
uint8_t Uart1_RxBuff[256];//接收缓冲
uint8_t Uart1_Rx_Cnt=0;//接收缓冲计数
uint8_t cAlmStr[]="数据溢出(大于256)";
main函数中加入中断函数:
int main(void)
{
//初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
//接收中断函数
HAL_UART_Receive_IT(&huart1,(uint8_t*)&aRxBuffer,1);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
重写HAL_UART_RxCpltCallback函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(Uart1_Rx_Cnt >= 255) //溢出判断
{
Uart1_Rx_Cnt = 0;
memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
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;
memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
四、参考
【STM32】HAL库 STM32CubeMX教程十一—DMA (串口DMA发送接收)
中断系统
串口通信
通用输入输出接口
【STM32】2-STM32中断系统(NVIC)
【STM32CubeMX】HAL库中断方式UART串口通信
版权声明:本文为CSDN博主「学不会编程的XX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30593663/article/details/122379927
一、原理介绍
(一)中断系统
(二)串口通信
二、STM32中断模式控制LED灯
1.新建STM32CubeMX工程(步骤与以往相同)
2.选择PA4设置为GPIO_Output输出模式,PB9设置为GPIO_EXTI9中断模式。
输出:
中断:
3.配置RCC和SYS。
RCC:
SYS:
4.配置PA4与PB9
PA4:
PB9:
5.开启中断
6.时钟树设置
7.选择路径——生成代码——打开至Keil
8.修改代码
在main.c中加入以下代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13); //翻转电平
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}
9.编译并烧录运行
烧录时BOOT0置1,BOOT1置0
三、串口中断方式进行串口通信
1.新建STM32CubeMX工程
2.选择USART1位异步通信模式
3.RCC与SYS配置
4.串口配置:
波特率为115200 Bits/s
传输数据长度为8 Bit
奇偶检验无
停止位1 接收和发送都使能
5.设置使能中断
6.修改代码
在main.c中加入头文件:
uint8_t aRxBuffer;//接收缓冲中断
uint8_t Uart1_RxBuff[256];//接收缓冲
uint8_t Uart1_Rx_Cnt=0;//接收缓冲计数
uint8_t cAlmStr[]="数据溢出(大于256)";
main函数中加入中断函数:
int main(void)
{
//初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
//接收中断函数
HAL_UART_Receive_IT(&huart1,(uint8_t*)&aRxBuffer,1);
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
重写HAL_UART_RxCpltCallback函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(Uart1_Rx_Cnt >= 255) //溢出判断
{
Uart1_Rx_Cnt = 0;
memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
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;
memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再开启接收中断
}
四、参考
【STM32】HAL库 STM32CubeMX教程十一—DMA (串口DMA发送接收)
中断系统
串口通信
通用输入输出接口
【STM32】2-STM32中断系统(NVIC)
【STM32CubeMX】HAL库中断方式UART串口通信
版权声明:本文为CSDN博主「学不会编程的XX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30593663/article/details/122379927
暂无评论