新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2019-9-9
- 在线时间
- 12 小时
|
最近遇到一个问题现象是这样的:
在F091芯片上,用uart+dma+idle实现uart接收发送不定长数据的功能,当串口用TTL通信的时候,没有任何问题;当串口和232通信的时候,或者串口和sim868(也是TTL电平)通信的时候,当uart初始化完成后,接着进行打开串口空闲中断以及DMA接收,这样就会出现第一帧FE的错误,接着进入中断处理函数,中断处理函数中会把DMAR关掉,这样后续DMA就会一直接收不到数据(DMA接收是circle模式,只在while之前打开一次);
如果uart初始化完成后,进行几毫秒的延时后,再打开空闲中断和DMA接收,这样程序运行就正常,虽然第一帧也会出现FE,但是因为延时的存在,uart中断处理函数会在这个延时中把FE处理掉,因为这个处理FE的时候,DMA还没打开,所以DMAR就不会被关掉,这样后续DMA接收就一直正常;不知道大家在用F0的单片机时有没有遇到过这种问题;代码如下:
  
start_uart1_dma() 和MX_USART1_UART_Init()之间的语句就相当于一个延时;如果按照图2的代码,在start_uart1_dma()之前加个delay_ms(100)延时也是也可以的。
不知道原子哥有没有发现这个问题呢?!!! 求回复!!!
|
|