如题:基于HAL库,STM32F0芯片通信过程中更改通信波特率,串口重启函数会挂掉!不知道问题出在哪里。。。
串口的初始化函数,是自动生成的,包括DMA配置、USART2配置,以及
HAL_UART_Receive_DMA(&huart2, UsartType.RX_pData, RX_LEN); //开启串口DMA接收
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE); //开启串口接收空闲中断
正常上电初始化流程没有任何问题,通信可以以配置的9600波特率跑起来。
但是使用通信报文更换通信波特率后,然后将串口初始化函数重新调用了一遍,
然后,就导致程序挂掉了,仿真显示进入了硬件错误:
void HardFault_Handler(void)
{}
不知道这到底是怎么回事!!
应该如何在程序运行过程中重启一个外设呢??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
差不多找到原因了,是DMA缓冲区的数据不管用不用,中断后都要清空,然后再开启接收。尤其是第一个字节。不然就会一直进中断,程序就死了。
void MX_USART2_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 9600;
huart2.Init.WordLength = UART_WORDLENGTH_9B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_EVEN;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
这个函数,在上电初始化中调用 串口就能正常工作,在主函数中更改波特率后调用,程序就进到硬件错误中断里面了!!
...这个函数不是把波特率改成9600么.....=-=你是不是波特率都没改成功.....
一周热门 更多>