数据通信方式及串口通信

      

GND线是为了统一两设备对高低电平的理解,都是相对于同一个GND而言的。

 串口通信是一种设备间常用的串行通信方式,串口通信的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

两设备传输数据过程中0和1两种状态都已被使用,无法确定何时开始或停止接收数据。约定当两设备不需要通讯时,发送端会持续发送高电平,发送端准备发送数据时先发送低电平(图中启动位)告诉接收端接收数据,数据发送完后发送端会发送一个高电平告诉接收端(图中停止位)。但传输的数据中有那么多高电位如何区分停止位,因此需要规定数据的位数(主体数据)。检验位:数据在传输过程中电平可能会被干扰(如高电平1变为低电平0),于是有了以下校验方法:奇检验、偶检验、0 检验、1 检验以及无检验。

奇检验:要求有效数据位和检验位的1总个数为奇数。例:10011001为了达到总个数为奇数校验位需置1.

偶检验:要求有效数据位和校验位的1总个数为偶数。例:10011001为了达到总个数为偶数校验位需置0.

机器只认识0和1,传输数据时会先把数据转化为二进制的0、1。当发送设备发送了连续的0或1时,只以0、1标准识别数据是不行的,这时就需要规定发送和接收每一位数据的时间(下图中每一个1或0的发送和接收时间),不仅可以让数据完整发送出去不会漏掉,也能保证接收准确性,不会错位。

波特率:表示每秒钟传送的码元符号的个数,所以它决定了数据帧里面每一个位的时间长度。两个要通信的设备的波特率一定要设置相同(不会错位)。
        随着科技的发展,RS-232 在工业上还有广泛的使用,但是在商业技术上,已经慢慢的使
USB 转串口取代了 RS-232 串口。我们只需要在电路中添加一个 USB 转串口芯片,就可以
实现 USB 通信协议和标准 UART 串行通信协议的转换,而我们开发板上的 USB 转串口芯片是
CH340C 这个芯片。STM32 的串口输出的是 TTL 电平信号。
上图从圈1(type-c接口)开始将发送端数据传到圈4,圈5处,才真正将数据传入到接收端。通过PA10把数据发送进MCU,PA9将数据发送进出去。轮循模式下CPU会一直读取TDR和RDR的状态,太占用CPU资源,我们就用中断来提高CPU 的利用率。当TDR或RDR为空时会触发中断把CPU叫回来给TDR、RDR里面放东西。
通用:IO端口的输入或输出是由GPIO外设控制
复用:IO端口的输入或输出是由其它非GPIO外设控制
USART1外设由其自身的DR寄存器控制,我们选用GPIO的复用功能。
要使用一个外设首先要对它进行初始化。
HAL 库通过调用串口初始化函数 HAL_UART_Init 完成对串口参数初始化。 注意:该函数会调用:HAL_UART_MspInit函数来完成对串口底层的初始化(执行回调函数里面的语句),包括:串口及 GPIO时钟使能、GPIO模式设置、中断设置等。
串口 1 中断服务函数为:USART1_IRQHandler,当发生中断的时候,程序就会执行中断服务函 数 。 HAL库为了使用方便提,供了一个串口中断通用处理HAL_UART_IRQHandler,该函数在串口接收完数据后,又会调用回调函数HAL_UART_RxCpltCallback,用于给用户处理串口接收到的数据。我们在回调函数HAL_UART_RxCpltCallback中用uint8_t g_usart1_rx_flag = 1表示串口接收到了数据。还需要通过USART_SR 寄存器第 5、6 位RXNE和TC来获取数据是否被接收或发送到了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值