#include "gd32e230.h" #include "SysTick.h" #include "breaker.h" #include "mb.h" #include "led.h" #include "timer.h" #define MODBUS_ADDR 0x40 #define MODBUS_BON 115200 #define MAX_CHN 6 void fwdgt_Init(void) { uint16_t timeout = 0xFFFFU; rcu_osci_on(RCU_IRC40K); while(SUCCESS != rcu_osci_stab_wait(RCU_IRC40K)) { if(timeout > 0) timeout--; else break; } fwdgt_config(2000,FWDGT_PSC_DIV64); fwdgt_write_disable(); fwdgt_enable(); } void feed_dog(void) { fwdgt_write_enable(); fwdgt_counter_reload(); } int main(void) { SystemInit(); InitSysTick(); breaker_init(); fwdgt_Init(); led_init(); timer_14_init(9999, 71); U8 id= breaker_read_id(); U8 addr = MODBUS_ADDR + (id); eMBInit(MB_RTU,addr,0,MODBUS_BON,MB_PAR_NONE); eMBEnable(); breaker_channels_t *channels = get_breakers(); U8 k = 0; channels->channel[k] = addr << 8 | MAX_CHN; while(1) { if(eMBCheck()) { eMBEnable(); } eMBPoll(); for(k = BREAKER_CHANNAL_1; k < BREAKER_CHANNAL_ERR;k++) { breaker_chn_read(&channels->channel[k],k); } led_flash(id); feed_dog(); //DelayNms(20); } }