目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-07-29 gingko 初次建立




STM32CubeMX教程五十五——RS_422通信实验

1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 3.配置RCC,使用外部时钟源 4.时基源选择SysTick 5.将PA10,PB7,PB8设置为GPIO_Output 6.引脚模式配置 7.配置串口 在NVIC Settings一栏使能接收中断 引脚配置 8.时钟源设置,选择外部高速时钟源,配置为最大主频 9.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27 10.点击Code Generator,进行进一步配置

11.然后点击GENERATE CODE 创建工程 创建成功,打开工程。



实验五十五:RS_422通信实验——收发测试

一、 实验目的与意义

  1. 了解STM32的UART结构。
  2. 了解STM32的UART特征。
  3. 掌握STM32的UART的使用方法。
  4. 掌握RS-422的使用方法。
  5. 掌握KEIL MDK 集成开发环境使用方法。

二、 实验设备及平台

  1. iCore4TX 双核心板点击购买
  2. iCore4TX 扩展底板。
  3. JLINK(或相同功能)仿真器。点击购买
  4. Micro USB线缆。
  5. Keil MDK 开发平台。
  6. STM32CubeMX开发平台。
  7. 装有WIN XP(及更高版本)系统的计算机。

三、 实验原理

1.串口通讯协议简介

2.协议层

原理图:

四、 实验程序

1.主函数

int main(void)
{
    char buffer[UART_BUFFER_SIZE];
  HAL_Init();
  SystemClock_Config();
    i2c.initialize();
    axp152.initialize();
    axp152.set_dcdc1(3500);//[ARM & FPGA]
    axp152.set_dcdc2(1200);//[FPGA INT]
    axp152.set_dcdc3(3300);//[DCOUT3]
    axp152.set_dcdc4(3300);//[DCOUT4]
 
    axp152.set_aldo1(3300);//[BK3]
    axp152.set_aldo2(3300);//[ALDOOUT2]
    axp152.set_dldo1(3300);//[BK0]
    axp152.set_dldo2(3300);//[BK1]
    HAL_Delay(200);
 
  MX_GPIO_Init();
  MX_USART1_UART_Init();
 
    usart1.initialize(115200);
    usart1.printf("Hello, I am iCore4TX\r\n");
 
  while (1)
  {
    if(usart1.receive_ok_flag){ //接收完成
      usart1.receive_ok_flag = 0;
            memcpy(buffer,usart1.receive_buffer,UART_BUFFER_SIZE);
            memset(usart1.receive_buffer,0,UART_BUFFER_SIZE);
            usart1.printf(buffer);//将接收数据发送出去
        }
  }
}

2.UART结构体定义

UART_HandleTypeDef huart1;
typedef struct __UART_HandleTypeDef   
{  
  USART_TypeDef                  *Instance;   
//UART寄存器基地址  
  UART_InitTypeDef               Init;      
  //UART通信参数 
  uint8_t                         * pTxBuffPtr; 
  //指向UART Tx传输缓冲区的指针  
  uint16_t                        TxXferSize;      
  //UART Tx传输大小
  __IO uint16_t                  TxXferCount;     
  //UART Tx传输计数器
  uint8_t                         * pRxBuffPtr;     
  //指向UART Rx传输缓冲区的指针 
  uint16_t                        RxXferSize;       
//UART Rx传输大小 
  __IO uint16_t                  RxXferCount;   
//UART Rx传输计数器 
  DMA_HandleTypeDef             * hdmatx;          
//UART Tx DMA句柄参数 
  DMA_HandleTypeDef             * hdmarx;          
//UART Rx DMA句柄参数  
  HAL_LockTypeDef                Lock;             
//锁定对象  
  __IO HAL_UART_StateTypeDef   gState;     
  //与全局句柄管理有关的UART状态信息并且与Tx操作有关。 
  __IO HAL_UART_StateTypeDef   RxState;          
//与Rx操作有关的UART状态信息  
  __IO uint32_t                   ErrorCode;       
 //UART错误代码  
} UART_HandleTypeDef;

3.串口发送/接收函数

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

4.串口中断函数

HAL_UART_IRQHandler(UART_HandleTypeDef *huart); 
//串口中断处理函数
HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);  
//串口发送中断回调函数
HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);  //串口发送一半中断回调函数(用的较少)
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);  
//串口接收中断回调函数
HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
//串口接收一半回调函数(用的较少)
HAL_UART_ErrorCallback();
//串口接收错误函数
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);  
HAL_UART_IRQHandler(UART_HandleTypeDef *huart);  
HAL_UART_GetState(); 
//判断UART的接收是否结束,或者发送数据是否忙碌

五、 实验步骤

  1. 把仿真器与iCore4TX的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把iCore4TX通过Micro USB线与计算机相连,为iCore4TX供电;
  3. 打开 Keil MDK 开发环境,并打开本实验工程;
  4. 烧写程序到 iCore4TX 上;
  5. 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。

六、 实验现象

通过串口工具向RS-422发送自定义数据,接收到来自RS-422的相同自定义数据。