仿真暂停,用软件看。或者串口输出寄存器的值。
CbueHal下 是用HAL_UART_GetState(UART_HandleTypeDef *huart);这函数调吗?程序卡死 在什么地方调? 是在卡死的地方调吗?
tianyukobe 发表于 2016-10-14 11:29
CbueHal下 是用HAL_UART_GetState(UART_HandleTypeDef *huart);这函数调吗?程序卡死 在什么地方调? ...
设全局变量,例如Debug_FLAG,
在你觉得可能出错的地方给Debug_FLAG赋值,
打开Keil的DEBUG,在Watch窗口添加变量Debug_FLAG,
然后看卡死的时候Debug_FLAG的值是多少,最后反过来查。
我是这样子查错的 好帖,必须支持一下!
难道不能在线仿真吗?通过仿真,查看各个寄存器的值,变量的值 本帖最后由 tianyukobe 于 2016-10-14 23:09 编辑
安 发表于 2016-10-14 14:44
难道不能在线仿真吗?通过仿真,查看各个寄存器的值,变量的值<div class="blockcode"><blockquote>//DMA发送
void Usart2SendData_DMA(uint8_t *pdata, uint16_t Length)
{
while(Uart2_Config.DmaSend_Flag == USART_DMA_SENDING);
Uart2_Config.DmaSend_Flag = USART_DMA_SENDING;
HAL_UART_Transmit_DMA(&huart2, pdata, Length);
}
void Usart3SendData_DMA(uint8_t *pdata, uint16_t Length)
{
while(Uart3_Config.DmaSend_Flag == USART_DMA_SENDING);
Uart3_Config.DmaSend_Flag = USART_DMA_SENDING;
HAL_UART_Transmit_DMA(&huart3, pdata, Length);
}
//DMA发送完成回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART2)
{
__HAL_DMA_DISABLE(huart->hdmatx);
Uart2_Config.DmaSend_Flag = USART_DMA_SENDOVER;
}
else if(huart->Instance==USART3)
{
__HAL_DMA_DISABLE(huart->hdmatx);
Uart3_Config.DmaSend_Flag = USART_DMA_SENDOVER;
}
}程序会卡在这while(Uart2_Config.DmaSend_Flag == USART_DMA_SENDING); 也就是回调函数不是百分百的能清除标志,我以为10ms双向发太快了,改成20ms,效果会好一点 但是还是会卡死 :):):):):):):):):):) 计算一下波特率发送一组数据需要的时间。 帮顶了!
页:
1
[2]