读取串口数据用中断处理函数好,还是定时中断回调函数好?
- 中断处理函数:当有新的数据接收到UART时,可以通过中断处理函数及时地对数据进行处理。在接收到数据时,UART会触发一个接收中断,中断处理函数会自动被调用。可以在中断处理函数中读取接收寄存器中的数据,并对其进行处理。这种方式适用于需要立即响应接收到的数据的场景,例如实时控制。(读取数组数据)
示例代码:
cCopy Code
void USART1_IRQHandler(void) { if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE)) { // 读取接收寄存器中的数据并进行处理 uint8_t data = huart1.Instance->DR; // 处理数据... } }
2.回调函数:如果需要定期地处理串口数据,例如每隔一段时间或定时器溢出时,可以使用回调函数。在初始化UART时,可以注册一个回调函数,在特定事件发生时自动调用该函数。在回调函数中可以读取接收寄存器中的数据,并进行相应的处理。这种方式适用于需要按照一定时间间隔处理串口数据的场景。(定时测编码器或者测速)
示例代码:
cCopy Code
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart == &huart1) { // 读取接收寄存器中的数据并进行处理 uint8_t data = huart1.Instance->DR; // 处理数据... } }
通过注册回调函数,当UART接收到数据时,库会自动调用该函数。在回调函数中,可以读取接收寄存器中的数据并进行相应的处理。
选择使用中断处理函数还是回调函数取决于具体需求和设计。中断处理函数适合实时响应数据的场景,而回调函数适合定期处理数据的场景。
注意:
如果你想用中断函数来定时的话只有两个方法
1.调节定时器的时钟频率,更改预分频器(PSC)和自动重装载值(ARR)可以更改定时时间
2.改变定时器的工作模式:定时器有多种工作模式可选择,其中包括向上计数模式、向下计数模式、中央对齐模式等。不同的工作模式可以对应不同的定时需求,例如周期性定时、单次定时等。通过选择合适的工作模式,可以实现特定的定时中断功能。
所以想实现定时,还是用这个配置个中断回调函数
再通过这种方式定时好