你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-H533RE评测】+04 串口中断使用心得

[复制链接]
〃聪聪哥哥 发布时间:2024-7-30 20:57

编译软件:MDK5.38a

一:参考第三篇printf输出配置参数,这里不再介绍

二:代码编写

l 首先串口时钟使能,GPIO时钟使能:    __HAL_RCC_USART2_CLK_ENABLE();

l GPIO端口模式设置:    __HAL_RCC_GPIOA_CLK_ENABLE();

l 串口参数初始化:HAL_UART_Init(&huart2)

l 开启中断并且初始化 HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);             HAL_NVIC_EnableIRQ(USART2_IRQn);

l 使能串口中断函数:

编写串口发送、接收中断函数:

串口中断回调函数

void  HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)//串口中断回调函数

{

uint8_t temp =0;     

if (huart == &huart2)    

{

temp = USART2->RDR;  

/串口发送正常函数/

        HAL_UART_Transmit(&huart2, (uint8_t *)&temp, 1, 0xFFFF);

/利用串口发送中断,导致少发送字节,在视频中进行测试/

// HAL_UART_Transmit_IT(&huart2,&temp,1);

HAL_UART_Receive_IT(&huart2, &rxBuffer[receivedIndex], 1);  //开启接收中断

} }

注意需要在串口初始化中编写,串口接收中断函数,否则串口2的中断部分不能正常进入。

1.png

正常的交互如下所示:

2.png

用该函数发送会出现HAL_UART_Transmit_IT(&huart2,&temp,1);

3.png

然后我查了一下两个函数的区别:

HAL_UART_Transmit为阻塞式发送函数,意思就是说发送数据时候会一直等待数据发送完成后才会返回。

而HAL_UART_Transmit_IT 是非阻塞式的发送函数,即发送数据时候,不会等待数据发送完成,而是立即返回,数据发送完成后会触发中断函数。

因此,如果使用HAL_UART_Transmit发送数据时候,程序会一直阻塞在该函数处,直到数据发送完成后才会继续执行下一条指令,而如果使用HAL_UART_Transmit_IT发送数据,则程序会立即返回,可以指继续执行下一条质量,数据发送完成后会触发中断函数,在中断函数中进行数据发送完成后的处理。

所以在我们使用的串口发送数据,需要根据当前函数操作进行判断使用哪种发送函数,如果数据量不大的情况下,可以使用HAL_UART_Transmit,如果数据量较大的情况下,可以使用串口接收的空闲中断方式,待接收完成所有的数据包后,在进行数据的发送,或者是使用CPU资源,使用DMA的方式进行发送数据。

收藏 评论0 发布时间:2024-7-30 20:57

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版