关于hal库 串口自发自收(及接收中断问题)

2019-08-14 05:24发布

总的来说  使用hal还是不太习惯
这里说一点 把tx和rx短接以后  自发自收问题
用hal本身的不好使,改良了 一下,  基本没问题
HAL_StatusTypeDef  HAL_UART1_Transmit_Personal(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{  
        u32 i=0;
        for(i=0;i<Size;i++)
        {
           HAL_UART_Transmit(huart,&pData,1,Timeout);
                         HAL_Delay(1);
                 HAL_UART_Receive_IT(huart,&RxBuff_Uart1,1);
        }
}


另外串口中断中
调用                                 while (HAL_UART_GetState(&huart1)!=HAL_UART_STATE_READY)//等待就绪
                                {
                                                        timeout++;////超时处理
                                                        if(timeout>maxDelay)
                                                        {
                                                                printf("huart1 error ");
                                                           return ;
                                                        }               
                                }         
                                    timeout=0;
                                while(HAL_UART_Receive_IT(&huart1,&RxBuff_Uart1,1)!=HAL_OK)//重新配置为下次做准备
                                {
                                                        timeout++; //超时处理
                                                        if(timeout>maxDelay)
                                                        {
                                                                printf("huart1 error ");
                                                           return ;
                                                        }                                                                       
                                }

程序运行时也需要上面操作,
  详情可以参考http://www.stm32cube.com/article/75
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
talenthn
1楼-- · 2019-08-14 06:32
 精彩回答 2  元偷偷看……
东方赤那
2楼-- · 2019-08-14 10:41
楼主的逻辑有问题
串口要先开接收中断   再发送数据
HAL_UART_Receive_IT(huart,&RxBuff_Uart1,1);
HAL_Delay(1);
HAL_UART_Transmit(huart,&pData,1,Timeout);
                        
                 

一周热门 更多>