stm32FのUARTでシリアルデータを受信するのにDMAのcircularモードを使うとDMAだけでデータをリングバッファに読み込むことが出来ます。 リングバッファからの読み出し関数は、DMAのポインタ(huart_cobs->hdmarx->Instance->CNDTR)をリングバッファへの書き込みポインタとして、読み出しポインタで書き込みポインタを追いかけるようにするだけです。 この手法は割り込みン数を使わずにデータをリングバッファに取り込めるのでとても簡単で効率が良いのですがSTM32CubeMXのHALライブラリを使っているとエラーが起きた時に勝手に送受信を止められてしまうという困った現象が起きます。 解決法を探していると同じことをやっている人がいて、「受信エラーはCRCチェックで対処するからHALライブラリのエラーハンドリングは邪魔なのでこうやってやめさせたよ。」という回答を
![stm32FのDMA Circular mode を使ったUART受信 | JSD 技術トピック / 組込み開発](https://cdn-ak-scissors.b.st-hatena.com/image/square/eb676c4c65034e6214d679c45a9652997317cb19/height=288;version=1;width=512/https%3A%2F%2Fi1.wp.com%2Fjsdkk.com%2F~jsdkk-com%2Fblog%2Fmugita%2Fwp-content%2Fuploads%2F2014%2F12%2Fcropped-stm32f105_image-e1418349710336-1.png%3Ffit%3D512%252C512%26ssl%3D1)