main.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "gd32e230.h"
  2. #include "SysTick.h"
  3. #include "breaker.h"
  4. #include "mb.h"
  5. #include "led.h"
  6. #include "timer.h"
  7. #define MODBUS_ADDR 0x40
  8. #define MODBUS_BON 115200
  9. #define MAX_CHN 6
  10. void fwdgt_Init(void)
  11. {
  12. uint16_t timeout = 0xFFFFU;
  13. rcu_osci_on(RCU_IRC40K);
  14. while(SUCCESS != rcu_osci_stab_wait(RCU_IRC40K))
  15. {
  16. if(timeout > 0)
  17. timeout--;
  18. else
  19. break;
  20. }
  21. fwdgt_config(2000,FWDGT_PSC_DIV64);
  22. fwdgt_write_disable();
  23. fwdgt_enable();
  24. }
  25. void feed_dog(void)
  26. {
  27. fwdgt_write_enable();
  28. fwdgt_counter_reload();
  29. }
  30. int main(void)
  31. {
  32. SystemInit();
  33. InitSysTick();
  34. breaker_init();
  35. fwdgt_Init();
  36. led_init();
  37. timer_14_init(9999, 71);
  38. U8 id= breaker_read_id();
  39. U8 addr = MODBUS_ADDR + (id);
  40. eMBInit(MB_RTU,addr,0,MODBUS_BON,MB_PAR_NONE);
  41. eMBEnable();
  42. breaker_channels_t *channels = get_breakers();
  43. U8 k = 0;
  44. channels->channel[k] = addr << 8 | MAX_CHN;
  45. while(1)
  46. {
  47. if(eMBCheck())
  48. {
  49. eMBEnable();
  50. }
  51. eMBPoll();
  52. for(k = BREAKER_CHANNAL_1; k < BREAKER_CHANNAL_ERR;k++)
  53. {
  54. breaker_chn_read(&channels->channel[k],k);
  55. }
  56. led_flash(id);
  57. feed_dog();
  58. //DelayNms(20);
  59. }
  60. }