RS-485是双向、半双工通信协议,信号采用差分传输方式,允许多个驱动器和接收器挂接在总线上,其中每个驱动器都能够脱离总线;实验的硬件电路由rs485直插差分芯片,芯片的输入多出一个re使能信号,输出A,B经过差分输出,通过485通信两边互相控制,key1—water_led,key2—breath_led,由于只有一块开发板,实验现象由SignalTap II观察;除了上述3个模块,rs485调用了key_filiter、led_ctrl、uart_rx、uart_tx;差分芯片的使能信号re用work_en代替,因此需要更改uart_tx部分,实现的方法是将bit_flag信号后移,由baud_cnt在比特结束位置触发,这样就可以使work_en覆盖一帧数据的10个比特,剩下的就是led的时序逻辑数据问题,首先是两个key_flag对w/b_en的控制如波形图,其他部分与rs232差别不大,而程序比较重要的一个难点在于在调用程序块时,端口的相互复用,使用SignalTap II发现波形变动符合要求,开发板现象符合。
London, UK创业公司在研发产品Air Moinitoring HAT,和树莓派配合使用的空气中浮粒检测传感器PMSA003,能实时准确测量PM1.0, PM2.5, PM10,传感器通过UART接口送出信息,开发人员可任意组合之同更便宜的Arduino或STM32单片机使用,并提供空气质量监测、追踪、污染识别等功能。据WHO统计数据,每年有420万人因空气中的微粒污染致死,为此该项技术具有非常重要的意义,该公司将提供传感器组件,并全力开源以造福民众健康。模组产品2021.2面市
rs232是一种异步串行通信口(串口),在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据,rs232接口和引脚定义如图,但实验只需要用到TXD与RXD引脚,并且使用rs232转USB输出,使用Typ—C接口;rs232整体接收时钟和复位信号,接受rx数据后通过uart_rx部分转化为输出数据与输出标志信号,二者作为uart_tx的输入,转化后发出tx数据;相比于时序逻辑,rx在输入时存在一个亚稳态(0或1),因此需要建立时间和保持时间,因此将输入rx_reg1作为下一个D触发器的输入,用2个触发器延时时钟周期达到消除亚稳态的目的;数据位rx通过三个rx_reg消除亚稳态处理,一次串行通信分别由起始位、数据位(Data[0:7])、停止位组成,起始信号start_flag在rx_reg3为高,其他两路为低时跳变一个时钟周期,同时work_en置高,bit_cnt和bit_flag作为work_en的标志信号,bit_cnt计数8次表示8个数据记完,同时bit_flag触发,work_en清零,而work_en置1的过程也是一个数据发送过程;数据触发脉冲bit_flag会在数据的中间位置BAUD_CNT_MAX / 2 - 1跳变一次,表示数据计数,而bit_cnt作为bit_flag的计数器计数9次表示通信一次,work_en清零;发送一个数据的过程由baud_cnt计数5208次为一波特数据标志(10波特一帧1+8+1);rx_data会输出rx_reg3的2—8位作为po_data,传输一次数据完后rx_flag触发赋值给po_flag;这样可以延时一个时钟周期;tx模块数据的触发发送,计时与rx类似;但不需要一个时钟周期的延时;函数的内部调用用到了一个任务函数,task,函数需要一个外部端口为之赋值,实验程序定义了一个一帧数据函数(起始位+8数据+停止位),endtask结束任务,任务在调用时使用initial语句,格式:任务函数名(变量名);;最后下载程序到开发板,使用串口助手得到实验目的实现。
✋热门推荐