今天学串口通讯模块
概念了解:串行通信?并行通信?同步?异步?单工?半双工?全双工?SBUFF(串口数据缓冲寄存器)?EA?ES?IE?RI?
串行通信是指数据一位一位地顺序传送。需要较少的数据线,适用于长距离通信。
并行通信是一组数据的各数据位在多条线上同时被传送。需要较多的数据线,成本较高,且距离受限,一般适用于短距离通信。
同步通信是指发送方和接收方在时钟信号的控制下同步进行数据传输。
异步通信是发送方和接收方之间不需要严格的同步时钟信号,依靠特定的起始位和停止位来标识数据的开始和结束。(就不同步呗)
单工通信是指数据只能在一个方向上传输,输入端只能输入,接收端只能接收,比如广播。
半双工通信是指数据可以在两个方向上传输,但不能同时进行,比如对讲机。
全双工通信是指数据可以在两个方向上同时传输,比如电话。
SBUFF 是串口数据缓冲寄存器,用于存储串口接收或发送的数据。在串口通信中,数据会先被存放在这个寄存器中,以便进行后续的处理或传输。它起到了数据缓存的作用,确保数据的稳定传输和处理。
EA控制着cpu对中断的开关,ES控制着串行口中断的开关
IE 是中断允许寄存器,用于控制各种中断的允许和禁止。包含着上方CPU和串行口的中断。
RI 是串口接收中断标志位,当串口接收到数据时该标志位置位
sprintf——c语言标准库,字符串格式化函数,以便将不同类型的数据(如整数、浮点数、字符等)按照特定的格式输出到字符串中。例如,可以用它将一个整数转换为字符串表示,或者将多个数据组合成一个特定格式的字符串输出。这个函数在 C 语言中常用于字符串处理和格式化输出的场景。注意:字符数组一定要大,格式化字符串中占位符要与可变参数列表中数据类型匹配
串口设计: 初始化——中断服务——字节发送
初始化:软件生成12MHz+串口1+定时器2+12T+EA=1,ES=1
中断服务:interrupt 4 判断RI是否接受数据,
字节发送函数&字符串发送函数:把dat数据发送给SBUF,用while循环等待发送,
怎么用?
在main.c文件里设置两个数组,一个发送数据,一个接收数据。
sprintf 函数将格式化后的字符串写入到 uart_send 数组中。格式化字符串为 “温度 =%.2f”,其中 %.2f 表示将一个浮点数格式化为保留两位小数的形式,t 是一个变量,代表要格式化的浮点数的值。整个语句的作用是将温度值以特定格式写入到串口发送数据储存在数组 uart_send 中。
串口函数:
减速,设置接收到的字符串长度/指针长度(第一步筛选)
然后读取数据/作出反应。最后将指针复位(为什么要复位?)
为下一次接收做准备
串口通信一般是持续接收数据的,当接收到完整的指令(在这个例子中是 6 个字符的指令)之后,就需要准备接收下一条指令了。把uart_recv_index
重置为 0,意味着从uart_recv
数组的起始位置开始重新存储新接收到的字符。
举个例子,当成功接收到 “lled48” 之后,下一次接收新指令时,又会从uart_recv[0]
开始存储字符,这样就能保证后续指令能正确地存储到数组中。
避免数组越界
如果uart_recv_index
不重置,在持续接收字符的过程中,它的值会不断增大,最终会超出uart_recv
数组的有效范围,从而引发数组越界错误。
——————————————分割线—————————————————————————
可恶,还是来了吗。疲惫和不足的动力,今天先休息。明天看考点精讲,把东西串一下。886