华大HC32F460RS485通信实验

目录

1.实验目标

2.实验准备

3.硬件原理

 4.驱动代码

6.主流程图

7.实验过程

1.实验目标

      本实验使用串口1,实现RS485对传功能。

2.实验准备

       硬件搭建:ZW-HC32F460-BZ标准版开发板1套

       软件搭建:MDK5.22

3.硬件原理

        这里我们使用板载的串口转RS485来实现功能。串口对应MCU的USART1,引脚使用PA2(TX)、PA3(RX)。RS485芯片是通过MCU的引脚PH2切换收发模式的。

     需要注意:原理图中PA2、PA3通过J19、J20进行跳线切换连接到RS485。

 4.驱动代码

RS485控制引脚初始化

      将RS485控制引脚PH2设置为输出模式,引脚低电平为接收模式,高电平为发送模式。

static void RS485Int( void )

{

       stc_port_init_t stcPortInit;

       MEM_ZERO_STRUCT( stcPortInit );                 //结构体初始化

       stcPortInit.enPinMode = Pin_Mode_Out;            //设置输出模式

       PORT_SetFunc( PortH, Pin02, Func_Gpio, Disable);

       PORT_Init( PortH, Pin02, &stcPortInit );   //初始化引脚

       PORT_ResetBits( PortH, Pin02 );                //置接收模式



       TovrRxInt();



       uartInt();//串口初始

}

RS485数据接收函数

      tvrRxs.buf数组是存储RS485接收到的数据,tvrRxs.len存储RS485接收到的数据长度。

void TovrRx( u8 ch )

{

       if( tvrRxs.lock )

              return;

       tvrRxs.buf[ tvrRxs.len++ ] = ch;



       if( tvrRxs.len > FIFO_MAX_SIZE )

       {

              tvrRxs.len = 0;

       }

       tvrRxs.flg = 1;

       tvrRxs.ct = tvrRxs.tim;

}

RS485数据发送函数

     通过len判断RS485是否接收数据,接收到数据就回发数据。

static void Rx485Dat( void )

{

       u32 i, len;

       u8 buf[ 100 ];

       len = TovrRxRead( buf, 100 );

       if(  len == 0 )

              return;



       mRuns.Led2Ct = 10;

       //回发数据

       PORT_SetBits( PortH, Pin02 );

       Ddl_Delay1ms( 5 );

       for( i = 0 ; i < len; i ++ )

       {

              while( Reset ==   USART_GetStatus( M4_USART1, UsartTxEmpty ) );  

              USART_SendData( M4_USART1, buf[ i ] );

       }

       Ddl_Delay1ms( 1 );

       PORT_ResetBits( PortH, Pin02 );

}

6.主流程图

  与6.3节实验基本一致,主要以下三个不同

  1. RS485初始化加入了控制引脚初始化;
  2. 串口中断中加入RS485接收函数;
  3. 在主循环中回发接收到的RS485数据:

7.实验过程

【第一步:新建/配置工程】

       将工程模板复制到实验目录下,将工程名改为RS485。

       勾选FWLibCfg.h配置中的CLK_EN、EFM_EN、GPIO_EN、PWC_EN、SRAM_EN、UTILITY_EN、USART_EN选项

【第二步:添加RS485模块驱动】

       将TovrRX.c和TovrRX.h复制到\实验13USART中断实验\Hardware\APP路径下,同时将TovrRX.c添加到工程中Hardware/OnBoard下

 【第三步:初始化编程】

    1)添加Usart头文件

         在main.c文件中添加TovrRX.h头文件。

#include "TovrRX.h"

    3)RS485初始化

        在主函数中调用USART初始化函数RS485Int()。

  RS485Int();

【第四步:功能实现】

   按照主逻辑编写while(1)功能即可。

int main( void )

{

       HardwareInt();

       RS485Int();

       while( 1 )

       {

              Rx485Dat();

              Ddl_Delay1ms( 1 );

              TovrTimCb();

       }     

}

【第五步:结果验证】

       编译代码并下载至开发板运行程序,使用RS485转USB连接到电脑上,打开串口助手进行数据发送,串口数据接收到同样的数据。


版权声明:本文为ZhuoWuKeJi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。