不确定“CDC协议规范”例程中此处是否存在BUG
前段时间做一个特别应用,使用CDC方式,发现在实时数据传输过程中改变波特率出现串口助手死锁情况。后来对usb_reg_class.c中的usb_uart_setting()进行了修改,死锁现象消失。
原代码:
void usb_uart_settings()
{
if (Setup.bRequest == SET_LINE_CODING)
{
LineCoding.bCharFormat = 0;
LineCoding.bDataBits = 8;
uart_set_parity(LineCoding.bParityType);
uart_set_baud(reverse4(LineCoding.dwDTERate));
}
}
修改后代码:(对计数器和中断进行了管理)
void usb_uart_settings()
{
if (Setup.bRequest == SET_LINE_CODING)
{
ES2=0;T2R=0;//关串口中断和计数器
LineCoding.bCharFormat = 0;
LineCoding.bDataBits = 8;
uart_set_parity(LineCoding.bParityType);
uart_set_baud(reverse4(LineCoding.dwDTERate));
T2R=1; ES2=1;//开串口中断和计数器
}
}
学习了 {:4_174:}{:4_174:}{:4_174:} 本帖最后由 xxkj2010 于 2024-6-8 08:25 编辑
不管有没有BUG,这个得先收藏下来,以后用到的时候可以注意一下。
页:
[1]