分享一个最近的工程案例,采用了华大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");
}
}
}
|