usart的dma实现是不是有问题?

比如说,我设置


  USART_InitStructure.USART_WordLength = USART_WordLength_9b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;

因为已经大于uint8了,所以我给dma的buff应该是uint16才对,不然怎么获取他的第九位。

  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;


但是读取数据的时候,却把第九位扔了。只传uint8

您好,关于串口数据长度配置成9位,是8位的数据位+1位的校验位,通常用于串口的奇偶校验,因此数据位的宽度还是8位,第9位为奇偶校验位,由硬件处理完成,因此DMA的数据宽度还是配置成8位即可。后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通


image.png

这个又该如何解释,9个数据位,如果包含检验位,那实际数据位只有8位。8个数据位,如果包含检验位,实际数据位只有7位,这个确定是这样的吗?校验位应该单独算的吧?


您好,当使用奇偶校验的时候,数据位只能配置为9位,不能配置为8位


您好,


        如果需要使用奇偶检验,需要讲串口配置为9位数据位;如果需要使用DMA每次传输9位数据,需要使用半字进行搬运,数据类型应配置为16位


image.png


image.png


image.png





只有登录才能回复,可以选择微信账号登录