中级会员
- 积分
- 254
- 金钱
- 254
- 注册时间
- 2022-11-5
- 在线时间
- 28 小时
|
1金钱
现在程序有一个问题,就是我的接收中断为
- void USER_USART1_IRQHandler(void)
- {
- uint8_t data = 0;
- if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
- {
- data = (uint8_t)USART1->RDR & (uint8_t)0x00fff;
- wrEleQueue(&uart[_COM1].Rx, data);
- uart[_COM1].active = true;
- // __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_RXNE);
- }
- // if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE))
- // {
- // uart[_COM1].flag = 1;
- // __HAL_UART_CLEAR_IDLEFLAG(&huart1);
- // }
- }
复制代码 然后我有一个发送数据的函数,但是现在我的接收中断接收不到数据,里面一直为空,为什么?主函数里面也调用了__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
- int SendDataUART(const char *s, uint32 number, COM_TypeDef com)
- {
- UART_HandleTypeDef *p;
- uint8_t *data = NULL;
- p = getUARTPtr(com);
- if (!p)
- return _ERR;
- wrBlockQueue(&uart[com].Tx, (uint8_t *)s, number);//将s写入到环形缓冲区中,写number个数据
- int len = QueueLen(uart[_COM1].Tx);//求环形缓冲区的长度
- data = (uint8_t *)calloc(len + 1, sizeof(uint8_t));
- if (!data)
- return _ERR;
- rdBlockQueue(data, &uart[com].Tx, len);//将环形缓冲区中的数据读出来,读len个长度
- HAL_UART_Transmit(&huart1, data, len, 500);
- free(data);
- return _OK;
-
-
- /* 本意是想使用这个来触发HAL_UART_TxCpltCallback回调函数,但是最后测试也不行 */
- // UART_HandleTypeDef *p;
- // p = getUARTPtr(com);
- // if (!p)
- // return _ERR;
- // wrBlockQueue(&(uart[com].Tx), (uint8_t *)s, number);
- // if ((__HAL_UART_GET_FLAG(p, UART_FLAG_BUSY) == RESET) || (__HAL_UART_GET_FLAG(p, UART_FLAG_TXE)))
- // {
- // uint8_t dat = 0;
- // rdEleQueue(&(uart[com].Tx), &dat);
- // // p->Instance->CR1 = (p->Instance->CR1 & (~(1 << 3))) | (1 << 3);
- // HAL_UART_Transmit_IT(p, &dat, 1);
- // // USART1->TDR = (uint8_t)dat;
- // }
- // return _OK;
- }
复制代码- 回调函数为
- void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
- {
- uint8_t dat;
- if (huart->Instance == USART1)
- {
- if (!isEmptyQueue(uart[_COM1].Tx))
- {
- rdEleQueue(&(uart[_COM1].Tx), &dat);//从环形缓冲区中读取一个元素
- // huart->Instance->CR1 = (huart->Instance->CR1 & (~(1 << 3))) | (1 << 3);
- HAL_UART_Transmit_IT(&huart1, &dat, 1);
- // USART1->TDR = (uint8_t)dat;
- }
- // else
- // huart->Instance->CR1 = (huart->Instance->CR1 & (~(1 << 3)));
- }
- }
复制代码
|
-
-
|