interrupt - HAL_UART_RxCpltCallback() 没有被执行
问题描述
我想通过中断模式通过UART环回发送10个字节的数据。虽然我能够接收数据,但我不明白为什么我的 HAL_UART_RxCpltCallback() 没有被执行。但是我的 HAL_UART_TxCpltCallback() 每次传输一个字节的数据后都会被执行。我已经通过 cubeMX 生成了代码。我已启用 USART2 全局中断。我的 USART2 的控制寄存器 (CR1) 是 0x300c。也就是说,仅设置了 UE,M,TE,RE 位。CR1 寄存器中未设置 TXIE、TCIE 位。现在,全局中断中的“全局”在这里是什么意思?这是否意味着 10 个源中的任何一个都会产生中断(在数据表中提到,如 Tx 完成、Rx 缓冲区已满等)?
CR1 寄存器中没有任何对应于中断的位被使能。但是每次传输一个字节的数据时,控件都会转到 HAL_UART_TxCpltCallback() 。为什么会这样?
请揭开谜底。
PS:我使用的是STM32F407G-DISC1板,Attolic Truestudio IDE,Ubuntu 16.04 OS。
UART_HandleTypeDef huart2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
uint8_t tx_data[] = {0,1,2,3,4,5,6,7,8,9};
uint8_t rx_data[10];
int main(void)
{
int i=0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
while (1)
{
HAL_UART_Transmit_IT(&huart2, &tx_data[i], 10);
HAL_Delay(1500);
HAL_UART_Receive_IT(&huart2, &rx_data[i] , 10);
HAL_Delay(1500);
if((xferCnt==10) || (rxCnt==10))
break;
else
i++;
}
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
xferCnt++;
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
rxCnt++;
}
解决方案
推荐阅读
- flutter - Flutter 为什么调用 addInitialChild() 后 firstChild 没有大小
- firebase - 为什么我在 firebasestore 中获得了这么多的阅读量?颤振聊天应用
- c - 如何使用 SDL2-mixer-dev 获取 MP3 的持续时间
- css - 使子元素不受 CSS 动画的影响
- python - 用于简单基本代码的 Jenkins 声明式管道
- java - 如何让我的程序检查数组是否包含 JLabel?
- django - django 管理更改页面添加外键错误:服务器拒绝连接
- sql - 如何将 MyDate 格式化为 DD/MM/YYYY
- streaming - 如何计算 Spark 结构化流作业的输入和处理速率?
- printer-control-language - 将通过串行端口读取打印机作业状态的演示代码