You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
8.0 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include <stddef.h>
  2. #include <stdio.h>
  3. #include "board.h"
  4. #include "sdk\components\subcanmodule\zcancmder_subboard_initer.hpp"
  5. /*******************************************************************************
  6. * PROJECT_INCLUDE *
  7. *******************************************************************************/
  8. #include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp"
  9. #include "sdk\components\mini_servo_motor\feite_servo_motor.hpp"
  10. #include "sdk\components\mini_servo_motor\mini_servo_motor_ctrl_module.hpp"
  11. #include "sdk\components\pipette_module\pipette_ctrl_module_v2.hpp"
  12. #include "sdk\components\sensors\m3078\m3078_code_scaner.hpp"
  13. #include "sdk\components\tmc\ic\ztmc4361A.hpp"
  14. #include "sdk\components\tmc\ic\ztmc5130.hpp"
  15. #define TAG "main"
  16. using namespace iflytop;
  17. using namespace std;
  18. static ZCancmderSubboardIniter initer;
  19. extern void umain();
  20. extern "C" {
  21. void StartDefaultTask(void const* argument) { umain(); }
  22. extern DMA_HandleTypeDef hdma_usart3_rx;
  23. extern DMA_HandleTypeDef hdma_usart3_tx;
  24. }
  25. /*******************************************************************************
  26. * GET_DEVICE_ID *
  27. *******************************************************************************/
  28. static int32_t getDeviceId() {
  29. static bool init = false;
  30. static ZGPIO ID0;
  31. static ZGPIO ID1;
  32. static ZGPIO ID2;
  33. static ZGPIO ID3;
  34. static ZGPIO ID4;
  35. if (!init) {
  36. ID0.initAsInput(ID0_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  37. ID1.initAsInput(ID1_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  38. ID2.initAsInput(ID2_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  39. ID3.initAsInput(ID3_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  40. ID4.initAsInput(ID4_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
  41. init = true;
  42. }
  43. uint8_t id = ID0.getState() * 1 + ID1.getState() * 2 + ID2.getState() * 4 + ID3.getState() * 8 + ID4.getState() * 16;
  44. return id;
  45. }
  46. /*******************************************************************************
  47. * INIT_SUBMODULE *
  48. *******************************************************************************/
  49. class PWMCtrler : public ZIPWMCtrl {
  50. ZPWMGenerator pwm;
  51. int32_t m_freq = 50000;
  52. int32_t m_duty = 30;
  53. int32_t m_state = 0;
  54. public:
  55. void initialize() {
  56. pwm.initialize(&htim2, TIM_CHANNEL_2, m_freq, 0);
  57. pwm.stopPWM();
  58. }
  59. virtual int32_t pwm_set_state(int32_t state) {
  60. if (state) {
  61. pwm.startPWM(m_freq, m_duty);
  62. } else {
  63. pwm.stopPWM();
  64. }
  65. m_state = state;
  66. return 0;
  67. }
  68. virtual int32_t pwm_get_state(int32_t& state) {
  69. state = m_state;
  70. return 0;
  71. }
  72. virtual int32_t set_pwm_duty(int32_t duty) {
  73. m_duty = duty;
  74. if (m_state) {
  75. pwm.startPWM(m_freq, m_duty);
  76. }
  77. return 0;
  78. }
  79. virtual int32_t get_pwm_duty(int32_t& duty) {
  80. duty = m_duty;
  81. return 0;
  82. }
  83. virtual int32_t set_pwm_freq(int32_t freq) {
  84. m_freq = freq;
  85. if (m_state) {
  86. pwm.startPWM(m_freq, m_duty);
  87. }
  88. return 0;
  89. }
  90. virtual int32_t get_pwm_freq(int32_t& duty) {
  91. duty = m_freq;
  92. return 0;
  93. }
  94. };
  95. PWMCtrler pwmCtrler;
  96. void nvs_init_cb() {}
  97. static void initsubmodule() {
  98. // osDelay(1000);
  99. {
  100. pwmCtrler.initialize();
  101. pwmCtrler.pwm_set_state(0);
  102. }
  103. }
  104. /*******************************************************************************
  105. * MAIN *
  106. *******************************************************************************/
  107. void umain() {
  108. ZCancmderSubboardIniter::cfg_t cfg = //
  109. {
  110. .deviceId = getDeviceId(),
  111. .input_gpio =
  112. {
  113. {.pin = PD0, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  114. {.pin = PD1, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  115. {.pin = PD2, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  116. {.pin = PD3, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  117. {.pin = PD4, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  118. {.pin = PD5, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  119. {.pin = PD6, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  120. {.pin = PD7, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  121. {.pin = PD8, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  122. {.pin = PD9, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  123. {.pin = PD10, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  124. {.pin = PD11, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  125. {.pin = PD12, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  126. {.pin = PD13, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  127. {.pin = PD14, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  128. {.pin = PD15, .mode = ZGPIO::kMode_nopull, .irqtype = ZGPIO::kIRQ_noIrq, .mirror = false},
  129. },
  130. .output_gpio =
  131. {
  132. {.pin = PE7, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  133. {.pin = PE8, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  134. {.pin = PE9, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  135. {.pin = PE10, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  136. {.pin = PE11, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  137. {.pin = PE12, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  138. {.pin = PE13, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  139. {.pin = PE14, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  140. {.pin = PE15, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  141. {.pin = PB0, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  142. {.pin = PB1, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  143. {.pin = PB2, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  144. {.pin = PB3, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  145. {.pin = PB4, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  146. {.pin = PB5, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  147. {.pin = PB6, .mode = ZGPIO::kMode_nopull, .mirror = true, .initLevel = false, .log_when_setstate = false},
  148. //
  149. {.pin = PC6, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false},
  150. {.pin = PC7, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false},
  151. {.pin = PC8, .mode = ZGPIO::kMode_pulldown, .mirror = false, .initLevel = false, .log_when_setstate = false},
  152. },
  153. .pwmctrl =
  154. {
  155. // &pwmCtrler,
  156. },
  157. };
  158. initer.init(&cfg);
  159. initsubmodule();
  160. initer.loop();
  161. }