打印
[综合信息]

HC32F003程序modbus通讯

[复制链接]
2689|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晓伍|  楼主 | 2021-8-1 15:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
分享一个最近的工程案例,采用了华大HC32F003C4PA作为主控,双串口,双modbus,控制8路输出和2路ADC采样。采用繁易组态屏modbus控制输出,查询AD值。工程文件做了详细的注释,希望对想要入手这颗芯片的朋友有所帮助。
另外,本来是要采用MM32003TW的,但是只有1路串口,不满足要求。对比一下二者差异:


/******************************************************************************
uart0 232 P27 P31  AF5
uart1 485 P36 P35  AF1  printf
R/T P34

P01 AIN7
P02 AIN8

P03 LED

P33 M1 J1
P32 M2 J2
P26 M3 J3
P25 M4 J4
P24 M5 J5
P23 M6 J6
P14 K1 J7
P15 K2 J8


在system_init.c中打开或关闭SWDIO功能,以实现下载调试或UART0复用输出
******************************************************************************/

#include "bsp_config.h"
#include "system_init.h"
#include "bsp_adc.h"
#include "bsp_uart.h"
#include "bsp_timer.h"
#include "Function.h"
#include "modbus.h"

#include "stdio.h"

uint8_t J1temp=0;


int32_t main(void)
{
        SysInit();//First  
    while(Ok != Flash_Init(6)){;}///< 确保初始化正确执行后方能进行FLASH编程操作,FLASH初始化(编程时间)
        //根据系统时钟频率选择Flash_Init(n)
        AdcPortInit();
        AdcInit();

        Uart0PortInit();
        Uar0tInit();
        Uart1PortInit();
        Uar1tInit();
       
        Timer2Init();
        Mosbus_Init();

        usePortCfg();
                       
        while(1)
        {
                ADCstep();
                Mosbus_Event(&Modbus232);
                Mosbus_Event(&Modbus485);
                if(Reg[0]==1) {LED_ON;}
                else                                  {LED_OFF;}
                if(Reg[1]==1) {J1_ON;}
                else                                  {J1_OFF;}
                if(Reg[2]==1) {J2_ON;}
                else                                  {J2_OFF;}
                if(Reg[3]==1) {J3_ON;}
                else                                  {J3_OFF;}               
                if(Reg[4]==1) {J4_ON;}
                else                                  {J4_OFF;}               
                if(Reg[5]==1) {J5_ON;}
                else                                  {J5_OFF;}               
                if(Reg[6]==1) {J6_ON;}
                else                                  {J6_OFF;}               
                if(Reg[7]==1) {J7_ON;}
                else                                  {J7_OFF;}               
                if(Reg[8]==1) {J8_ON;}
                else                                  {J8_OFF;}               
               
                if(Timer2TestData>999)
                {
                        Timer2TestData=0;
                        if(J1temp==0)
                        {
                                J1temp=1;
                        }
                        else         
                        {
                                J1temp=0;
                        }
       
//                        LED_TGL;
//                    printf("%2.4f\n",i);
//                        printf("BGD=%d\n",u16AdcBandGap);  //485设置了RT
//                        printf("A=%d\n",u16AdcResultA);
//                        printf("B=%d\n",u16AdcResultB);
//                        printf("\r\n");
                }
        }


}


使用特权

评论回复
沙发
wakayi| | 2024-6-5 09:14 | 只看该作者
在进行引脚定义的时候最好加注释 要不然时间长了就忘了

使用特权

评论回复
板凳
tpgf| | 2024-6-5 09:54 | 只看该作者
如果是一路串口的话 可以使用普通的io口进行模拟吗

使用特权

评论回复
地板
guanjiaer| | 2024-6-5 10:26 | 只看该作者
用io模拟的串口的通讯速度会不会比较慢呢

使用特权

评论回复
5
木木guainv| | 2024-6-5 12:32 | 只看该作者
可以配置成哪种类型的modbus通讯呢

使用特权

评论回复
6
xiaoqizi| | 2024-6-5 22:50 | 只看该作者
只有一个串口的芯片估计不超过20个引脚

使用特权

评论回复
7
wowu| | 2024-6-5 23:23 | 只看该作者
感觉在while循环里边将if语句改成switch语句更好点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

4143

帖子

1

粉丝