西安新站网站推广优化建筑工程造价信息网
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:12
当前位置: 首页 > news >正文
西安新站网站推广优化,建筑工程造价信息网,网站开发后端选择,wordpress 积分阅读通信接口 •通信的目的#xff1a;将一个设备的数据传送到另一个设备#xff0c;扩展硬件系统 • 通信协议#xff1a;制定通信的规则#xff0c;通信双方按照协议规则进行数据收发 全双工#xff1a;指通信双方能够同时进行双向通信#xff0c;一般来说#xff0c;全双…通信接口 •通信的目的将一个设备的数据传送到另一个设备扩展硬件系统 • 通信协议制定通信的规则通信双方按照协议规则进行数据收发 全双工指通信双方能够同时进行双向通信一般来说全双工的通信都有两根通信线发送线路和接收线路互不影响 半双工数据传输指数据可以在一个信号载体的两个方向上传输但是不能同时传输 单工指数据只能从一个设备到另一个设备不可以反着来 时钟的作用如果输出了一段高电平的波形就是依靠时钟来判断波形是两个高电平信号还是一个高电平信号即告诉接收方什么时候需要采集数据I2C和SPI都有单独的时钟线接收方可以在时钟信号的指引下进行采样其他的没有时钟线所以需要双方约定一个采样频率为异步通信 电平单端引脚的高低电平都是对GND的电压差所以单端信号通信的双方都必须要共地即把GND接在一起差分靠两个差分引脚的电压差来传输信号的在通信时可以不需要GND差分信号可以极大地提高抗干扰特性所以差分信号的传输速度和距离都会非常高。 设备特性多设备可以在总线上挂载多个设备还需要寻址的操作 点对点两个设备直接传输数据 串口 • 串口是一种应用十分广泛的通讯接口串口成本低、容易使用、通信线路简单可实现两个设备的互相通信 • 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信极大地扩展了单片机的应用范围增强了单片机系统的硬件实力 硬件电路 • 简单双向串口通信有两根通信线发送端 TX 和接收端 RX • TX 与 RX 要交叉连接 • 当只需单向的数据传输时可以只接一根通信线 • 当电平标准不一致时需要加电平转换芯片 电平标准 • 电平标准是数据 1 和数据 0 的表达方式是传输线缆中人为规定的电压与数据的对应关系串口常用的电平标准有如下三种 • TTL 电平 3.3V 或 5V 表示 1 0V 表示 0 • RS232 电平 -3~-15V 表示 1 3~15V 表示 0 • RS485 电平两线压差 26V 表示 1 -2-6V 表示 0 差分信号 串口参数及时序 • 波特率串口通信的速率决定了每隔几秒发送一位数据 • 起始位标志一个数据帧的开始固定为低电平产生下降沿表示开始 • 数据位数据帧的有效载荷 1 为高电平 0 为低电平低位先行 即先发送数据的低位由低位到高位输出 • 校验位用于数据验证根据数据位计算得来奇校验和偶校验效果不如CRC校验 • 停止位用于数据帧间隔固定为高电平产生上升沿表示结束方便下一次的下降沿开始 USART简介 • USART Universal Synchronous/Asynchronous Receiver/Transmitter 通用同步 / 异步收发器 • USART 是 STM32 内部集成的硬件外设可根据数据寄存器的一个字节数据自动生成数据帧时序从 TX 引脚发送出去也可自动接收 RX 引脚的数据帧时序拼接为一个字节数据存放在数据寄存器里 • 自带波特率发生器最高达 4.5Mbits/s • 可配置数据位长度 8⁄9 、停止位长度 0.5/1/1.5⁄2 • 可选校验位无校验 / 奇校验 / 偶校验 • 支持同步模式、硬件流控制、 DMA 、智能卡、 IrDA 、 LIN • • STM32F103C8T6 USART 资源 USART1 、 USART2 、 USART3 USART框图 引脚处只需要注意TX发送和RX接收引脚即可 发送数据寄存器和接收数据寄存器共用一个地址DR的TDR是只写的RDR是只读的当我们想要写入DR时写入的是TDR读出DR时读出的是RDR。 发送移位寄存器工作方式当我们给TDR写入一个数据时此时硬件检测到写入数据了就会检查当前移位寄存器是否有数据正在移位如果没有那么我们输入的数据就会立刻全部移动到发送移位寄存器中准备发送在数据从TDR移动到移位寄存器时会置一个标志位TXE发送寄存器空我们就可以检查这个标志位如果置1了我们就可以给TDR写入下一个数据了。然后发送移位寄存器就会在发生器控制的驱动下向右一位一位地把数据输出到TX引脚低位先行当移位完成后新的数据就会再次自动地从TDR转移到发送移位寄存器中来如果移位寄存器中的数据还未移位完成那么TDR就会进行等待一旦移位完成就会立马把数据转移过来。双重缓存 接收移位寄存器同理。置的标志位位RXNE SCLK作用1可以兼容别的协议作用2可以做自适应波特率 硬件数据流控制用得少不解释 唤醒单元可以用来实现多设备通信的功能 波特率发生器部分实际上就是分频器USART1挂载在APB2所以就是PCLK2的时钟一般是72M其他的USART都挂载在APB1所以是PCLK1的时钟一般是36M之后这个时钟进行一个分频除一个USARTDIV的分频系数之后分频完之后再除个16的带发送器时钟和接收器时钟通向控制部分。如果TE为1则发送部分的波特率有效RE为1则接收部分的波特率有效。 USART基本结构 数据帧 字长设置 停止位 起始位侦测排除噪声P26-25:36 数据采样 波特率发生器 • 发送器和接收器的波特率由波特率寄存器 BRR 里的 DIV 确定 • 计算公式波特率 f PCLK2/1 / (16 * DIV) DIV分为整数部分和小数部分可以实现更细腻的分频 代码实操 串口发送 根据引脚定义我们计划使用USART1的TX和RX引脚所以要接到PA9和PA10上注意接收脚和发送脚要交替相接 介绍相关函数 老朋友 void USART_DeInit(USART_TypeDef* USARTx); void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); void USART_StructInit(USART_InitTypeDef* USART_InitStruct); void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState); void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);配置同步时钟输出时钟是否需要输出时钟的极性相位等 void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);开启USART到DMA的触发通道 void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);发送数据和接收数据即写DR寄存器和读DR寄存器 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); uint16_t USART_ReceiveData(USART_TypeDef* USARTx);四个标志位函数完成和中断 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);按照下图流程编写初始化函数 1、开启时钟把需要用到的USART和GPIO的时钟打开 //开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 2、GPIO初始化把TX配置成复用输出RT配置成输入 //GPIOGPIO_InitTypeDef GPIO_InitStructure;//TX是USART外设控制的输出脚使用复用推挽输出//RX是USART外设数据输入表使用输入模式//因为串口波形空闲状态时高电平所以一般使用浮空输入或者上拉输入//此代码只需要发送GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); 3、配置USART //USARTUSART_InitTypeDef USART_InitStructure;//波特率(直接写我们需要的波特率即可函数可以帮我们算好相对应的分频系数USART_InitStructure.USART_BaudRate 9600;//硬件流控制(只使用RTX或者CTX、或者不用、或者都用)USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None;//USART模式(TX或者RX当两者都想用时就可以使用|符号类似GPIO选择两个引脚)USART_InitStructure.USART_Mode USART_Mode_Tx;//校验(Odd奇校验Even偶校验No无)USART_InitStructure.USART_Parity USART_Parity_No;//停止位USART_InitStructure.USART_StopBits USART_StopBits_1;//字长USART_InitStructure.USART_WordLength USART_WordLength_8b;USART_Init(USART1, USART_InitStructure);4、开启开关如果需要接收信息还需要配置中这样就需要再加上ITConfig和NVIC的代码 USART_Cmd(USART1, ENABLE); 5、创建一个发送数据的函数 void Serial_SendByte(uint8_t Byte) {USART_SendData(USART1, Byte);//判断TDR的数据是否转移到移位寄存器//第二个参数传输数据寄存器TDR空标志//在数据手册25.6.1中对TXE描述为再次对DR进行写操作时,即再次调用SendData函数时//标志位会自动置0所以我们不用手动清零了while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) RESET);}再在主函数中调用试一下 #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Serial.hint main(void) {OLED_Init();Serial_Init();Serial_SendByte(0x41);while(1){} }得到
- 上一篇: 西安微信网站开发北京网页制作案例
- 下一篇: 西安营销型网站外贸先做网站再开公司
相关文章
-
西安微信网站开发北京网页制作案例
西安微信网站开发北京网页制作案例
- 技术栈
- 2026年03月21日
-
西安微网站浏览器打开是2345网址导航
西安微网站浏览器打开是2345网址导航
- 技术栈
- 2026年03月21日
-
西安网站制作开发公司哪家好怎么做网站内部链接的优化
西安网站制作开发公司哪家好怎么做网站内部链接的优化
- 技术栈
- 2026年03月21日
-
西安营销型网站外贸先做网站再开公司
西安营销型网站外贸先做网站再开公司
- 技术栈
- 2026年03月21日
-
西安有关做网站的公司外贸优秀网站
西安有关做网站的公司外贸优秀网站
- 技术栈
- 2026年03月21日
-
西安有哪些家做网站的公司赚钱平台网站
西安有哪些家做网站的公司赚钱平台网站
- 技术栈
- 2026年03月21日
