当前位置: 首页 > news >正文

STM32串口通信

一.数据传送的方式

   串行通讯    速度慢,占用资源少,距离远

   并行通讯    速度快,占用资源多

二.通信方式

    单工通讯        一个固定发送,一个固定接受

    半双工通讯       对讲机

    全双工通讯       电话

三.数据同步方式

 1. 异步通信
 1.数据是以字符为单位组成字符帧传输的。
 2.字符帧由发送端一帧一帧的发送,每帧数据均是低位在前,高位在后,通过传输线被接收端一帧一帧的接收。
 3.发送端和接收端可以有各自独立的时钟来控制数据的发送和接收,这两个时钟各自独立,互不同步。
  4.接收端依靠字符帧格式来判断发送端是何时开始和结束发送的。
 5.字符帧也叫做数据帧,由起始位,数据位,奇偶校验位,停止位等部分组成,是异步通信的一个重要指标。
 6.同步通信的另一个重要指标是波特率。
 2.同步通信
  1.同步是指在约定的通信速率下,发送端和接收端的时钟信号和相位始终保持一致,保证通信双方在发送和接收数据时具有完全一致的定时关系。
 2.同步通信把许多字符组成一个信息帧,每帧的开始用同步字符来表示。
 3.在绝大多数场合下,发送端和接收端,采用的都是同一个时钟,所以在传送数据的同时还要发送时钟信号,以便接收端可以使用时钟信号来确定每一个信息位。
  4.同步通信一次通信只能传送一帧信息。

   异步(无时钟)   用奇偶校验位来保证信息的同时接受

四.通信速率

  比特率:每秒传输的二进制位 bit

  波特率:每秒传输的码元个数串口

  一个二进制表示一个码元

五.常用通信协议

  TTL电平:数字芯片的电平、单片机  (0~5v)

  RS232电平:电脑串口的电平,负逻辑

  usb转串口主要用于电脑和其他设备连接,使用时电脑要 下载电平转换芯片的驱动

六.串口基础知识

串口单片机是有默认的对应引脚,要看芯片手册

  串口包

  起始位:有一个逻辑0表示(第一个低电平),表示传输数据开始

  有效数据位:紧跟着起始位的就是有效数据位长度位5、6、7或8位长

  校验位:可选,目的为数据坑干扰性

  停止位 :0.5,1,1.5,2个逻辑的数据位表示高电平

  校验方法

  奇校验:有效数据和校验位中1的个数为奇数。10010110,四个1,校验位为1,加上一个位,九个位传输

    偶校验:有效数据和校验位中1的个数为偶数。10010110,四个0,校验位为0,加上一个位,九 个位传输

  0校验:校验位总为0

  1校验:校验位总为1

  无校验:数据包不含校验位

我们要写数据(发送)不是直接发出去的,是先到发送数据寄存器中存储,然后到发送移位寄存器,一位一位的发送出去。

1.TX:数据发送端口
2. RX:数据接收端口
3. SW.RX.在单线和智能卡模式下接收数据,属于内部端口,没有实际的外部引脚
4. RTS:在硬件流控制下用于指示设备准备好可以接收数据了,低电平表示可以接收数据。
5. CTS:在硬件流控制下用于指示设备以及发送完数据了,如果是高电平那么在本次数据发送完成后会阻塞下一次的传输,只有在低电平的时候才允许下一次传输。
6.CK:同步时钟端口,在同步通信模式下使用,用于输出同步时钟信号。

UART框图配置步骤
• 选择需要使用的USART/UART(根据地址映射表得到地址)
• 根据需要的波特率设置BRR寄存器
• 根据需求配置控制寄存器中的停止位和校验位
• 根据需求配置同步时钟使能位
• 使能USART的发送和接收位
• 根据需求使能发送和接收的中断位
• 使能RCC中的选中的USART/UART的时钟
• 使館USART/UART
•写USART_DR寄存器发送数据,读USART_DR寄存器接收数据

七.如何配置串口发送

  1.配置时钟     GPIO的时钟  串口的时钟  引脚服用的时钟

  2.配置GPIO结构体

  3.配置串口结构体

  4.串口发送(在main函数中写)

  USART_FLAG_TXE  数据寄存器空标志位(发送完成空的)

八.定时器

    stm3fxx系列有八个定时器,两个高级定时器+四个不同定时器+两个基本定时器

    

定时器实现灯的闪烁main中代码

void TIM2_IRQHandler(void)    
{
    
     static uint16_t temp;   //ĬÈϳõʼ»¯Îª0
     if( TIM_GetITStatus( TIM2, TIM_IT_Update)!=RESET)   
     {
         if(temp++%2==1)
     { 
         GPIO_ResetBits( GPIOA,  GPIO_Pin_1);  
             
     }
      else
       {
                         GPIO_SetBits( GPIOA,  GPIO_Pin_1);    
         }
         
     }

   TIM_ClearITPendingBit( TIM2,TIM_IT_Update);

相关文章:

  • ‘java‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • 【网络】什么是 IHL(Internet Header Length,首部长度)TTL(Time To Live,生存时间)?
  • 【编解码技术】什么是编码复杂度?
  • SpringMVC(三)响应处理
  • 构建智能汽车地图标准体系:自动驾驶技术的基石
  • 一文讲清楚CUDA与PyTorch、GPU之间的关系
  • 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇
  • 【Linux-传输层协议TCP】TCP协议段格式+确认应答+超时重传+连接管理机制(三次握手、四次挥手、理解TIME_WAIT + CLOSE_WAIT)
  • 结构型——适配器模式
  • 二维数组常见应用场景以及示例
  • [Ai 力扣题单] 数组基本操作篇 27/704/344/386
  • Linux系统性能调优
  • 数据库系统原理|课程回顾与习题部分参考答案
  • 区间预测 | Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测
  • Python画图
  • Markdown:Mermaid 画图
  • 【Go类库分享】Go expr 通用表达式引擎
  • Flutter 从入门到进阶:构建跨平台应用的最佳实践
  • 结构型——装饰器模式
  • 【Jmeter】使用教程
  • 漳州做网站匹配博大钱少a/站长工具综合查询2020
  • 合肥哪里有做网站的/少儿编程培训机构排名前十
  • 网站设计一般什么字体/广告公司
  • 潍坊网站建设/网络推广是什么意思
  • 做动态的网站的参考资料有哪些/手机如何建网站
  • 做网站的文章/优化公司结构