用户工具

站点工具


icore4t_54

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
icore4t_54 [2020/04/01 01:00]
zgf 创建
icore4t_54 [2022/04/01 10:56] (当前版本)
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-04-01 ​ |  gingko ​ |  初次建立 ​ |  |  V1.0  |  2020-04-01 ​ |  gingko ​ |  初次建立 ​ | 
行 73: 行 72:
 ==== 二、 实验设备及平台 ==== ==== 二、 实验设备及平台 ====
  
-  - iCore4T 双核心板。 +  - iCore4T 双核心板。[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&​id=610595120319|点击购买]]
-[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c.w137644-251734891.3.5923532fDrMDOe&​id=610595120319|点击购买]]+
   - iCore4T 扩展底板。   - iCore4T 扩展底板。
   - JLINK(或相同功能)仿真器。[[https://​item.taobao.com/​item.htm?​id=554869837940|点击购买]]   - JLINK(或相同功能)仿真器。[[https://​item.taobao.com/​item.htm?​id=554869837940|点击购买]]
行 94: 行 92:
   * **物理层:**   * **物理层:**
   * 我们知道差分信号线具有很强的干扰能力,特别适合应用于电磁环境复杂的工业控制环境中, RS-485 协议主要是把 RS-232 的信号改进成差分信号,从而大大提高了抗干扰特性,它的通讯网络示意图见下图。 ​   * 我们知道差分信号线具有很强的干扰能力,特别适合应用于电磁环境复杂的工业控制环境中, RS-485 协议主要是把 RS-232 的信号改进成差分信号,从而大大提高了抗干扰特性,它的通讯网络示意图见下图。 ​
-{{ :icore4t:icore4t_arm_hal_54_2.png?direct |}}+{{ :icore4t:icore4t_arm_hal_54_1.png?direct&​700 ​|}}
   * 在 RS-485 通讯网络中,每个节点都是由一个通讯控制器和一个收发器组成,节点中的串口控制器使用 RX 与 TX信号线连接到收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中,这里我们使用了SP3485芯片进行转换。   * 在 RS-485 通讯网络中,每个节点都是由一个通讯控制器和一个收发器组成,节点中的串口控制器使用 RX 与 TX信号线连接到收发器上,而收发器通过差分线连接到网络总线,串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中,这里我们使用了SP3485芯片进行转换。
   * RS-485 通讯网络的最大传输距离可达 1200 米,总线上可挂载 128 个通讯节点,而由于 RS-485 网络只有一对差分信号线,它使用差分信号来表达逻辑,当 AB 两线间的电压差为-6V~-2V 时表示逻辑 1,当电压差为+2V~+6V 表示逻辑 0,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的,它与 RS-232 通讯协议的特性对比见下图。   * RS-485 通讯网络的最大传输距离可达 1200 米,总线上可挂载 128 个通讯节点,而由于 RS-485 网络只有一对差分信号线,它使用差分信号来表达逻辑,当 AB 两线间的电压差为-6V~-2V 时表示逻辑 1,当电压差为+2V~+6V 表示逻辑 0,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的,它与 RS-232 通讯协议的特性对比见下图。
-{{ :icore4t:icore4t_arm_hal_54_1.png?direct |}}+{{ :icore4t:icore4t_arm_hal_54_2.png?direct&​700 ​|}}
   * RS-485 与 RS-232 的差异只体现在物理层上,它们的协议层是相同的,也是使用串口数据包的形式传输数据。而由于 RS-485 具有强大的组网功能,人们在基础协议之上还制定了 MODBUS 协议,被广泛应用在工业控制网络中。   * RS-485 与 RS-232 的差异只体现在物理层上,它们的协议层是相同的,也是使用串口数据包的形式传输数据。而由于 RS-485 具有强大的组网功能,人们在基础协议之上还制定了 MODBUS 协议,被广泛应用在工业控制网络中。
   * 由于 RS-485 与 RS-232 的协议层没有区别,进行通讯时,我们同样是使用 STM32 的USART 外设作为通讯节点中的串口控制器,再外接一个 RS-485 收发器芯片把 USART 外设的 TTL 电平信号转化成 RS-485 的差分信号即可。   * 由于 RS-485 与 RS-232 的协议层没有区别,进行通讯时,我们同样是使用 STM32 的USART 外设作为通讯节点中的串口控制器,再外接一个 RS-485 收发器芯片把 USART 外设的 TTL 电平信号转化成 RS-485 的差分信号即可。
   * **协议层:**   * **协议层:**
   * 串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。串口数据包的基本组成如下图:   * 串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。串口数据包的基本组成如下图:
-{{ :​icore4t:​icore4t_arm_hal_54_3.png?​direct |}}+{{ :​icore4t:​icore4t_arm_hal_54_3.png?​direct&​700 ​|}}
   * 1. 波特率   * 1. 波特率
-  ​* 本实验中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号(如前面的 DB9接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,上图中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、 9600、 115200 等。+    ​* 本实验中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号(如前面的 DB9接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,上图中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、 9600、 115200 等。
   * 2. 通讯的起始和停止信号   * 2. 通讯的起始和停止信号
-  ​* 串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。+    ​* 串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
   * 3. 有效数据   * 3. 有效数据
-  ​* 在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长。+    ​* 在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位长。
   * 4. 数据校验   * 4. 数据校验
-  ​* 在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、 0 校验(space)、 1 校验(mark)以及无校验(noparity),它们介绍如下:+    ​* 在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、 0 校验(space)、 1 校验(mark)以及无校验(noparity),它们介绍如下:
   * 奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为: 01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。   * 奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为: 01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。
   * 偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧: 11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。   * 偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧: 11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。
行 117: 行 115:
   * 在本实验中,我们的计算机通过转接模块连接iCore4T的RS-485,通过串口工具向RS-485发送数据并接收RS-485发来的数据。   * 在本实验中,我们的计算机通过转接模块连接iCore4T的RS-485,通过串口工具向RS-485发送数据并接收RS-485发来的数据。
   * 原理图:   * 原理图:
-{{ :​icore4t:​icore4t_arm_hal_54_4.png?​direct |}}+{{ :​icore4t:​icore4t_arm_hal_54_4.png?​direct&​750 ​|}}
 ==== 四、 实验程序 ==== ==== 四、 实验程序 ====
  
行 197: 行 195:
 === 3.串口发送/​接收函数 === === 3.串口发送/​接收函数 ===
  
-HAL_UART_Transmit();​串口发送数据,使用超时管理机制  +  * HAL_UART_Transmit();​串口发送数据,使用超时管理机制  
-HAL_UART_Receive();​串口接收数据,使用超时管理机制 +  ​* ​HAL_UART_Receive();​串口接收数据,使用超时管理机制 
-HAL_UART_Transmit_IT();​串口中断模式发送 ​  +  ​* ​HAL_UART_Transmit_IT();​串口中断模式发送 ​  
-HAL_UART_Receive_IT();​串口中断模式接收 +  ​* ​HAL_UART_Receive_IT();​串口中断模式接收 
-HAL_UART_Transmit_DMA();​串口DMA模式发送 +  ​* ​HAL_UART_Transmit_DMA();​串口DMA模式发送 
-HAL_UART_Transmit_DMA();​串口DMA模式接收 +  ​* ​HAL_UART_Transmit_DMA();​串口DMA模式接收 
-串口发送数据+  ​* ​串口发送数据
 <code c> <code c>
 HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
行 266: 行 264:
  
   * 通过串口工具向RS-485发送自定义数据,接收到来自RS-485的相同自定义数据。   * 通过串口工具向RS-485发送自定义数据,接收到来自RS-485的相同自定义数据。
- +{{ :​icore4t:​icore4t_arm_hal_54_6.png?​direct |}} 
  
icore4t_54.1585674049.txt.gz · 最后更改: 2020/04/01 01:00 由 zgf