• 单片机学习心得


    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。

      什么是串口

      UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器

      USART : Universal Synchronous Asynchronous Receiver/Transmitter

      通用同步/异步收发器

      一种是常用也是最简单的串行数据传输协议。数据线只需要两根就可以实现全双工。

      Tx: 发送数据线

      Rx: 接收数据线

      A B

      TX -----------> Rx

      Rx <------------Tx

      全双工: 两个设备可以同时发送和接收

      串行数据: 发送只一根线,一次只能发送一bit. 一bit接着一bit发送和接收。

      模块通信: 上位机 下位机

      通信一般需要两个设备,我们把这两个设备,人为叫做上位机, 下位机。

      上位机: 把处理性能强的机子,上位机。数据大部分处理都在上位机完成。

      下位机: 把数据采集的终端,处理性能单一的机子,下位机。

      串口只有一根发送数据线,假如 A要发送一个字符数据  10101010 给B

      A -------- ---------

      -------- ------- ...

      高电平周期是多长?即使是不发送数据Tx线上也有一个电平状态,接收方

      它怎么知道你是在发送呢?....

      UART数据如何传输?

      UART protocol 串口协议。

      串口发送和接收数据是以帧为单位. Frame

      1帧(Frame)= 1 start bit(起始位) + 5-9bits数据位 + 0/1bit 校验位  + stop bits(0.5,

      1,1,5,2)

      起始位: 一个周期的低电平

      数据位: 5-9bits数据位,具体是多少bits,需要双方协商。并且传送是先传送LSB(最低位) … MSB

      校验位:

      0 bit :没有校验位

      1 bit :校验位. “赖子” X

      D0 D1 D2 … Dn X

      奇校验:要保证传输的1为奇数

      D0 D1 D2 … Dn X 要保证这一串数据中1的个数为奇数

      1 0 1 0 1 0 1 0 X(1)

      1 0 1 0 1 0 1 1 X(0)

      偶校验:要保存传输的1为偶数

      停止位: 高电平

      0.5 个停止位。 半个周期的高电平

      1 个停止位

      1.5 个停止位

      2 个停止位

      Baudrate(波特率): 传输速率。

      决定 时间周期。

      115200 bps: bits per second

      物理层标准  the physical layer standards

      TTL level UART : TTL电平串口

      RS-232:

      RS-422:

      RS-485:

      TTL level UART:

      逻辑低电平(0) 0V

      逻辑高电平(1) 5V/3.3V

      RS-232: 适合较长距离传输

      逻辑低电平(0) +3v~+15V

      逻辑高电平(1) -3v~-15v

      TTL UART RS-232 RS-422 RS-485

      电平 1 3.3V/5V 1 -5V ~ -15V +/- 2v +/- 1.5v

      0 0V 0 5V ~ +15V

      信号 单端信号   单端信号  差分信号   差分信号

      传输长度 < 2m <15m <1200m <1200m

      不同标准的串口,引脚也不一样。TX/Rx是一定存在的。

      TTL

      RX

      TX

      GND

      VCC

      STM32F4xx 串口控制器

      TX

      RX

      硬件流控:

      RTS: Request To Send 请求发送信号

      终端告诉对方可以向我传输数据啦。

      CTS: Clear To Send 清除发送信号

      对方告知终端,我要向你发送数据啦

      RTS -------> CTS(对方)

      CTS <------- RTS(对方)

      标志位:

      TXE: Transmit data Register Empty

      发送数据寄存器为空。

      不代表上一次数据已经发送完成啦,因为数据有可能还在 shifter里面

      但是此时您可以向TDR写数据啦。

      TC : Transmit Complete

      发送完成。

      发送移位寄存器中的数据已经发送到Tx引脚上面去了。

      RXNE: Read Data register Not Empty

      接收数据寄存器不为空。意思是你可以读数据啦。

      STM32F4xx串口代码流程

      (1) GPIO口配置

      串口的TX/RX 引脚是由GPIO口来复用的。

      a. 使能GPIO分组的时钟

      RCC_AHB1PeriphClockCmd

      b. 配置GPIO口的功能 GPIO_Init

      c. 选择具体的复用功能

      GPIO_PinAFConfig

      (2) usart配置

      a. 使能usart时钟

      b. USART_Init

      USART_Init(USART_TypeDef * USARTx, USART_InitTypeDef *

      USART_InitStruct);

      typedef struct

      {

      uint32_t USART_BaudRate; // 波特率

      uint16_t USART_WordLength; //传输字长 ,如下两个任选其一:

      USART_WordLength_8b

      USART_WordLength_9b

      在STM32中:传输字长=数据位数+检验位数

      uint16_t USART_StopBits; //停止位数,如下 :

      USART_StopBits_1 1bit停止位

      USART_StopBits_1_5 1.5bit停止位

      USART_StopBits_2 2 bits停止位

      USART_StopBits_0_5 0.5bit停止位

      uint16_t USART_Parity; //校验方式,如下:

      USART_Parity_No 无校验

      USART_Parity_Odd 奇校验

      USART_Parity_Even 偶校验

      uint16_t USART_Mode; //串口模式, 如下:可以组合

      USART_Mode_Tx 发送模式

      USART_Mode_Rx 接收模式

      USART_Mode_Tx | USART_Mode_Rx 发送和接收模式

      uint16_t USART_HardwareFlowControl; //硬件流控

      USART_HardwareFlowControl_None 无硬件流控

      USART_HardwareFlowControl_RTS RTS 请求发送。你可以接收对方的数据。

      USART_HardwareFlowControl_CTS CTS 清除发送,你可以发数据给对方。

      USART_HardwareFlowControl_RTS_CTS RTS_CTS 发送和接收都用流控

      } USART_InitTypeDef;

      (3) 中断的配置

      USART_ITConfig <- 配置串品的中断

      在STM32中一个USART只对应一个中断通道,但是引起串口中断的

      事件有很多,比如:

      TXE -> 发送寄存器为空,可以引起串口中断

      TC -> 发送完成,可以引起串口中断

      RXNE -> 接收寄存器不为空,可以引起串口中断

      ……

      只不过,这些事件需要"中断控制位使能"

      USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);

      USART_ITConfig就是用来把一个串口的XX事件,配置成是否引起串口中断的

      在串口中断函数里面,就需要判断是哪个串口事件,引起了中断!!!

      NVIC_Init()

      (4) 使能串口

      USART_Cmd

      接收(中断函数)

      USART1_IRQHanlder()

      {

      if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

      {

      //有数据可读啦

      data = USART_ReceiveData(USART1); //读取接收到的数据

      }

      //清除USART1的中断标志

      USART_GetITStatus

      }

      USART_GetITStatus用来获取串口的xx事件标志位

      发送数据

      USART_SendData(USART1, 0x55);

      while (USART_GetFlagStatus(USRAT1, USART_FLAG_TXE) == RESET); //等待发送结束

    stm32 视频学习资料

    (stm32串口应用)
    http://www.makeru.com.cn/live/detail/1290.html?s=143793
    http://www.makeru.com.cn/live/1392_1164.html?s=143793
    (stm32电机驱动)
    http://www.makeru.com.cn/live/1392_1218.html?s=143793
    (定时器)
    http://www.makeru.com.cn/live/1392_1199.html?s=143793

  • 相关阅读:
    moc处理cpp文件
    程序员!你还能年轻几岁?
    多媒体会议系统中的延迟
    把C++类成员函数集成到lua
    Q_PROPERTY使用
    python与c的集成
    注册C函数与类成员函数到lua
    摄像头(WebCam)在Linux操作系统中的驱动方法
    网络营销实战必读之书推荐:《网络营销实战密码》
    这样写的博客才有更多的人愿意看
  • 原文地址:https://www.cnblogs.com/jinwenyi/p/13261521.html
Copyright © 2020-2023  润新知