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.

128 lines
4.7 KiB

3 months ago
  1. #include "apphardware.hpp"
  2. #include "ucomponents/zcan/zcan.hpp"
  3. using namespace iflytop;
  4. #define TAG "AppHardware"
  5. void AppHardware::setTJCScreenInDownloadMode() {
  6. TJC_UART_CH_SEL.setState(true);
  7. TJC_UART_CH_EN.setState(false);
  8. }
  9. void AppHardware::initialize() {
  10. AppHal::rtc_init();
  11. ZCAN1::ins()->zcaninit(CAN1_TX_PIN, CAN1_RX_PIN);
  12. AppHal::tmc_spi_init();
  13. // TJC SCREEN UART INIT
  14. TJC_UART_CH_SEL.initAsOutput(TJC_UART_CH_SEL_PIN, kxs_gpio_nopull, false, false);
  15. TJC_UART_CH_EN.initAsOutput(TJC_UART_CH_EN_PIN, kxs_gpio_nopull, false, false);
  16. static_assert(&TJC_UART_INS == &huart4);
  17. AppHal::UART4_Init(TJC_UART_TX, TJC_UART_RX, 256000);
  18. tjcUart = &TJC_UART_INS;
  19. // BLE REMOTER UART INIT
  20. static_assert(&BLE_UART_INS == &huart3);
  21. AppHal::UART3_Init(BLE_UART_TX, BLE_UART_RX, 115200);
  22. remoteContolerUart = &BLE_UART_INS;
  23. MOTO_POWER_EN.initAsOutput(MOTO_POWER_EN_IO, kxs_gpio_nopull, false, true);
  24. MOTO1_CSN.initAsOutput(MOTO1_CSN_IO, kxs_gpio_nopull, false, true);
  25. MOTO2_CSN.initAsOutput(MOTO2_CSN_IO, kxs_gpio_nopull, false, true);
  26. MOTO3_CSN.initAsOutput(MOTO3_CSN_IO, kxs_gpio_nopull, false, true);
  27. MOTO4_CSN.initAsOutput(MOTO4_CSN_IO, kxs_gpio_nopull, false, true);
  28. MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  29. MOTO2_DRV_ENN.initAsOutput(MOTO2_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  30. MOTO3_DRV_ENN.initAsOutput(MOTO3_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  31. MOTO4_DRV_ENN.initAsOutput(MOTO4_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  32. MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  33. MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  34. MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  35. MOTO1_DRV_ENN.initAsOutput(MOTO1_DRV_ENN_IO, kxs_gpio_nopull, false, true);
  36. MOTOR1_REF_L.initAsInput(MOTOR1_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  37. MOTOR1_REF_R.initAsInput(MOTOR1_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  38. MOTOR2_REF_L.initAsInput(MOTOR2_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  39. MOTOR2_REF_R.initAsInput(MOTOR2_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  40. MOTOR3_REF_L.initAsInput(MOTOR3_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  41. MOTOR3_REF_R.initAsInput(MOTOR3_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  42. MOTOR4_REF_L.initAsInput(MOTOR4_REF_L_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  43. MOTOR4_REF_R.initAsInput(MOTOR4_REF_R_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  44. id.ID0.initAsInput(ID0_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  45. id.ID1.initAsInput(ID1_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  46. id.ID2.initAsInput(ID2_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  47. id.ID3.initAsInput(ID3_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  48. id.ID4.initAsInput(ID4_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  49. IO_OUT1.initAsOutput(IO_OUT1_IO, kxs_gpio_nopull, true, false);
  50. IO_OUT2.initAsOutput(IO_OUT2_IO, kxs_gpio_nopull, true, false);
  51. BLE_CONNECTED_STATE.initAsInput(BLE_CONNECTED_STATE_IO, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  52. osDelay(1500);
  53. MOTO_POWER_EN.setState(false);
  54. TMC51X0Cfg tmc5130cfg1 = {&MOTOR_SPI_INS, MOTO1_CSN_IO, MOTO1_DRV_ENN_IO};
  55. TMC51X0Cfg tmc5130cfg2 = {&MOTOR_SPI_INS, MOTO2_CSN_IO, MOTO2_DRV_ENN_IO};
  56. TMC51X0Cfg tmc5130cfg3 = {&MOTOR_SPI_INS, MOTO3_CSN_IO, MOTO3_DRV_ENN_IO};
  57. TMC51X0Cfg tmc5130cfg4 = {&MOTOR_SPI_INS, MOTO4_CSN_IO, MOTO4_DRV_ENN_IO};
  58. MOTO1.initialize(0, tmc5130cfg1);
  59. MOTO2.initialize(1, tmc5130cfg2);
  60. MOTO3.initialize(2, tmc5130cfg3);
  61. MOTO4.initialize(3, tmc5130cfg4);
  62. ZLOGI(TAG, "motor1 initialize TMC51X0:%x", MOTO1.readICVersion());
  63. ZLOGI(TAG, "motor2 initialize TMC51X0:%x", MOTO2.readICVersion());
  64. ZLOGI(TAG, "motor3 initialize TMC51X0:%x", MOTO3.readICVersion());
  65. ZLOGI(TAG, "motor4 initialize TMC51X0:%x", MOTO4.readICVersion());
  66. MOTO1.setGlobalScale(64);
  67. MOTO2.setGlobalScale(64);
  68. MOTO3.setGlobalScale(64);
  69. MOTO4.setGlobalScale(64);
  70. MOTO1.setIHOLD_IRUN(10, 31, 100);
  71. MOTO2.setIHOLD_IRUN(10, 31, 100);
  72. MOTO3.setIHOLD_IRUN(10, 31, 100);
  73. MOTO4.setIHOLD_IRUN(10, 31, 100);
  74. MOTO1.setScale(1000);
  75. MOTO2.setScale(1000);
  76. MOTO3.setScale(1000);
  77. MOTO4.setScale(1000);
  78. // MOTO1.enable(1);
  79. // MOTO2.enable(1);
  80. // MOTO3.enable(1);
  81. // MOTO4.enable(1);
  82. // MOTO1.rotate(1000);
  83. // MOTO2.rotate(1000);
  84. // MOTO3.rotate(1000);
  85. // MOTO4.rotate(1000);
  86. IO_OUT1.setState(false);
  87. IO_OUT2.setState(false);
  88. AppHal::MX_I2C1_Init();
  89. eeprom.initialize(&hi2c1);
  90. if (!eeprom.isOnline()) {
  91. ZLOGE(TAG, "eeprom is not online");
  92. return;
  93. }
  94. hardwareInitedOK = true;
  95. ZLOGI(TAG, "hardware initialize ok");
  96. }
  97. bool AppHardware::isHardInitOk() { return hardwareInitedOK; }