问题:单片机为stm32f767,用HAL库
单片机功能为定时向外发送数据,用串口助手给单片机发送数据会造成死机,分析原因无果,在网上搜索,发现HAL库串口发送和接收都会上锁,处于忙状态,也就是发送和接收不能同时进行,否则会异常。发送函数为HAL_UART_Transmit,接收函数为HAL_UART_Receive_IT,将两个函数中上锁函数__HAL_LOCK(huart)注释掉,测试无效,可能注释的不全,只能找其他办法
解决办法:
发送和接收都用寄存器
发送: void send(u8 TXDATA)
{
while((USART1->ISR&0X40)==0);
USART1->TDR=TXDATA;
}
接收:void USART1_IRQHandler(void)
{
u8 res;
if(USART1->ISR&(1<<5))
{
res=USART1->RDR;
}
}
当然如果需要用DMA,最好只有一个用,另一个用寄存器,这样发送接收就能同时工作了