一般都为TTL标准
9位数据帧是因为在前八位有效载荷后面加上了一个奇偶校验位
无校验就是不需要校验
奇校验,如果使用奇校验包括校验位在内的九位数据会出现奇数个1,如果数据位里的1是偶数位,那么校验位就补一个1达到奇数位,如果数据位为奇数位,那么校验位补0。
接收方,在接受数据后,会验证数据位和校验位如果1的个数还是奇数就认为数据没有出错,如果传输过程中因为干扰有一个由1变为0,或者0变为1,那么整个数据的奇偶特性就会变化。
偶校验同理。
串口参数
波特率,每秒传输码元的个数,有时也叫比特率,每秒传输的比特数单位为bit/s或bps,决定了每隔多久发送一位(bit)------------------- 1byte=8bit详见秒表大佬的博客bit、byte、KB、B、字节、位、字符之间关系详解_kb b bit-CSDN博客
起始位固定为低电平是为了由高电平变低电平产生的下降沿,宣告传输开始,停止位固定为高电平是为了方便下一次数据传输产生下降沿。
USART(通用同步/异步收发器)主要异步通信。USART的外设是串口通信的硬件支持电路,大体可以分为发送和接收两部分。
停止位的长度决定了帧的间隔,最常用的是一位停止位
DMA(Direct Memory Access),即“直接 存储器存取/访问”,可以提供外设和存储器之间,或存储器和存储器之间直接的高速数据传输。这里的外设指外设寄存器指外设的数据寄存器Data Register——DR,例如ADC的数据寄存器,串口的数据寄存器等;存储器指运行内存SRAM和程序存储器Flash,是存储变量、数组和程序代码的地方。需要注意的是,原理上DMA执行存储器到存储器的数据转运,只不过STM32特殊制定了可以将外设的存储器看作普通的存储器进行数据转运。这个传输过程无需CPU干预,节省了CPU资源。
波特率发生器用来产生约定的通信速率,时钟来源是PCLK2或1分频后产生的时钟通向发送控制器和接收控制器,用来控制发送移位和接收移位,之后由发送数据寄存器和发送移位寄存器配合,通过GPIO口的复用输出,输出到TX引脚,产生串口协议规定的波形。接收同理,RX接收到的波形在GPIO引脚从左低位先行引入,移完一帧数据数据统一转运到接收寄存器,在转移的同时置一个RXNE的标志位,检查此标志位可以知道是否收到数据,同时此标志为也可以申请中断,收到数据时直接进入中断函数,快速的读取和保存数据,这四个寄存机在软件操作时统称为DR寄存器,开关控制为配置完成后用CMD开启外设
注:移位寄存器是右移,低位先行,接收寄存器右移,高位先行。高位先行即在传输一个字节的时候先传输高位;低位先行即在传输一个字节的时候先传输低位。高位先行和低位先行是针对串行数据传输方式来说的。
高低位先行可以看看MrBlackWhite博主的文章,写的非常好。大小端与高位先行、低位先行_小端存储和低位优先的区别-CSDN博客
空闲数据帧都置1
断开帧都置0