stm32f302ve, usart1 recv by DMA mode with idle interrupt. Output LOG by RTT and uart3 by priority and color.
- stm32CubeMx 配置选项
![6c8f656012543274e44ce53fbe54b06](https://private-user-images.githubusercontent.com/41199004/276062202-8308609b-63fb-4b21-a67a-a66a548dceaf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkxNjYwODQsIm5iZiI6MTczOTE2NTc4NCwicGF0aCI6Ii80MTE5OTAwNC8yNzYwNjIyMDItODMwODYwOWItNjNmYi00YjIxLWE2N2EtYTY2YTU0OGRjZWFmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDA1MzYyNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTlmOTFlNmI1MGFlMzZhYjQ1ZmI1NWMyZWE2NzZjMjVkZDllY2NiZjk3ODZjMTY4OWRhMGNlODYyYTc2MjhkODEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.XKFbDuSBN2St3yNeKe4tI4RI3u0VC1rNKYQnlEN664o)
上图中,mode
有两个选项:
Normal
表示DMA
接收完成后,就停止接收,需要重新调用HAL_UARTEx_ReceiveToIdle_DMA();
函数才能开始下一次接收;Circular
表示DMA
持续接收,不会主动停止。当给定的缓存满了后,又从头开始覆盖之前的数据;
上图中的fifo
功能,我理解就是以下两种情况下会使用:
DMA
的源数据和目标数据宽度不匹配,比如来源是按字节计算的,而目标地址需要按字存储,就可以通过FIFO
转接完成这个数据宽度匹配;- 为了减少
DMA
占用总线是总时长,比如需要从外设采集数据存储到内存,数据来源为字节,不使用FIFO
时,每个字节DMA
都要写一次内存;当使用FIFO
时,可以暂时将采集的数据存储到FIFO
中,等积累到指定threshold
,一次性将之前累积的数据存储到内存;