|
現(xiàn)在程序有一個(gè)問題,就是我的接收中斷為
- 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);
- // }
- }
復(fù)制代碼 然后我有一個(gè)發(fā)送數(shù)據(jù)的函數(shù),但是現(xiàn)在我的接收中斷接收不到數(shù)據(jù),里面一直為空,為什么?主函數(shù)里面也調(diào)用了__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寫入到環(huán)形緩沖區(qū)中,寫number個(gè)數(shù)據(jù)
- int len = QueueLen(uart[_COM1].Tx);//求環(huán)形緩沖區(qū)的長(zhǎng)度
- data = (uint8_t *)calloc(len + 1, sizeof(uint8_t));
- if (!data)
- return _ERR;
- rdBlockQueue(data, &uart[com].Tx, len);//將環(huán)形緩沖區(qū)中的數(shù)據(jù)讀出來,讀len個(gè)長(zhǎng)度
- HAL_UART_Transmit(&huart1, data, len, 500);
- free(data);
- return _OK;
-
-
- /* 本意是想使用這個(gè)來觸發(fā)HAL_UART_TxCpltCallback回調(diào)函數(shù),但是最后測(cè)試也不行 */
- // 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;
- }
復(fù)制代碼- 回調(diào)函數(shù)為
- void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
- {
- uint8_t dat;
- if (huart->Instance == USART1)
- {
- if (!isEmptyQueue(uart[_COM1].Tx))
- {
- rdEleQueue(&(uart[_COM1].Tx), &dat);//從環(huán)形緩沖區(qū)中讀取一個(gè)元素
- // 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)));
- }
- }
復(fù)制代碼
|
|