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.

328 lines
12 KiB

11 months ago
12 months ago
11 months ago
12 months ago
11 months ago
12 months ago
11 months ago
11 months ago
11 months ago
12 months ago
11 months ago
12 months ago
11 months ago
12 months ago
11 months ago
12 months ago
11 months ago
12 months ago
11 months ago
11 months ago
  1. #include "apphal.hpp"
  2. using namespace iflytop;
  3. void AppHal::MX_TIM6_Init(void) {
  4. __HAL_RCC_TIM6_CLK_ENABLE();
  5. TIM_MasterConfigTypeDef sMasterConfig = {0};
  6. htim6.Instance = TIM6;
  7. htim6.Init.Prescaler = 71;
  8. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  9. htim6.Init.Period = 65535;
  10. htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  11. if (HAL_TIM_Base_Init(&htim6) != HAL_OK) {
  12. Error_Handler();
  13. }
  14. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  15. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  16. if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) {
  17. Error_Handler();
  18. }
  19. /* TIM6 interrupt Init */
  20. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0);
  21. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  22. }
  23. /* TIM7 init function */
  24. void AppHal::MX_TIM7_Init(void) {
  25. __HAL_RCC_TIM7_CLK_ENABLE();
  26. TIM_MasterConfigTypeDef sMasterConfig = {0};
  27. htim7.Instance = TIM7;
  28. htim7.Init.Prescaler = 81;
  29. htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  30. htim7.Init.Period = 65535;
  31. htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  32. if (HAL_TIM_Base_Init(&htim7) != HAL_OK) {
  33. Error_Handler();
  34. }
  35. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  36. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  37. if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK) {
  38. Error_Handler();
  39. }
  40. /* TIM7 interrupt Init */
  41. HAL_NVIC_SetPriority(TIM7_IRQn, 5, 0);
  42. HAL_NVIC_EnableIRQ(TIM7_IRQn);
  43. }
  44. #define EARLY_ASSERT(exptr) \
  45. if (!(exptr)) { \
  46. while (true) { \
  47. } \
  48. }
  49. void AppHal::DEBUG_UART_INIT(Pin_t tx, Pin_t rx, int32_t baudrate) {
  50. GPIO_InitTypeDef GPIO_InitStruct = {0};
  51. EARLY_ASSERT(PA9 == tx);
  52. EARLY_ASSERT(PA10 == rx);
  53. /***********************************************************************************************************************
  54. * IO初? *
  55. ***********************************************************************************************************************/
  56. __HAL_RCC_USART1_CLK_ENABLE();
  57. __HAL_RCC_GPIOA_CLK_ENABLE();
  58. __HAL_RCC_DMA2_CLK_ENABLE();
  59. GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
  60. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  61. GPIO_InitStruct.Pull = GPIO_NOPULL;
  62. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  63. GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  64. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  65. huart1.Instance = USART1;
  66. huart1.Init.BaudRate = baudrate;
  67. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  68. huart1.Init.StopBits = UART_STOPBITS_1;
  69. huart1.Init.Parity = UART_PARITY_NONE;
  70. huart1.Init.Mode = UART_MODE_TX_RX;
  71. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  72. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  73. if (HAL_UART_Init(&huart1) != HAL_OK) {
  74. Error_Handler();
  75. }
  76. /***********************************************************************************************************************
  77. * DMA初? *
  78. ***********************************************************************************************************************/
  79. HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
  80. HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
  81. hdma2_stream2.Instance = DMA2_Stream2;
  82. hdma2_stream2.Init.Channel = DMA_CHANNEL_4;
  83. hdma2_stream2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  84. hdma2_stream2.Init.PeriphInc = DMA_PINC_DISABLE;
  85. hdma2_stream2.Init.MemInc = DMA_MINC_ENABLE;
  86. hdma2_stream2.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  87. hdma2_stream2.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  88. hdma2_stream2.Init.Mode = DMA_NORMAL;
  89. hdma2_stream2.Init.Priority = DMA_PRIORITY_LOW;
  90. hdma2_stream2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  91. if (HAL_DMA_Init(&hdma2_stream2) != HAL_OK) {
  92. Error_Handler();
  93. }
  94. __HAL_LINKDMA(&huart1, hdmarx, hdma2_stream2);
  95. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  96. HAL_NVIC_EnableIRQ(USART1_IRQn);
  97. }
  98. void AppHal::MX_IWDG_Init(void) {
  99. hiwdg.Instance = IWDG;
  100. hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
  101. hiwdg.Init.Reload = 4095;
  102. if (HAL_IWDG_Init(&hiwdg) != HAL_OK) {
  103. Error_Handler();
  104. }
  105. }
  106. void AppHal::UART3_Init() {
  107. GPIO_InitTypeDef GPIO_InitStruct = {0};
  108. __HAL_RCC_USART3_CLK_ENABLE();
  109. __HAL_RCC_GPIOB_CLK_ENABLE();
  110. __HAL_RCC_DMA1_CLK_ENABLE();
  111. huart3.Instance = USART3;
  112. huart3.Init.BaudRate = 115200;
  113. huart3.Init.WordLength = UART_WORDLENGTH_8B;
  114. huart3.Init.StopBits = UART_STOPBITS_1;
  115. huart3.Init.Parity = UART_PARITY_NONE;
  116. huart3.Init.Mode = UART_MODE_TX_RX;
  117. huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  118. huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  119. if (HAL_UART_Init(&huart3) != HAL_OK) {
  120. Error_Handler();
  121. }
  122. GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11;
  123. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  124. GPIO_InitStruct.Pull = GPIO_NOPULL;
  125. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  126. GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
  127. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  128. hdma1_stream1.Instance = DMA1_Stream1;
  129. hdma1_stream1.Init.Channel = DMA_CHANNEL_4;
  130. hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  131. hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE;
  132. hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE;
  133. hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  134. hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  135. hdma1_stream1.Init.Mode = DMA_NORMAL;
  136. hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW;
  137. hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  138. if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) {
  139. Error_Handler();
  140. }
  141. __HAL_LINKDMA(&huart3, hdmarx, hdma1_stream1);
  142. hdma1_stream3.Instance = DMA1_Stream3;
  143. hdma1_stream3.Init.Channel = DMA_CHANNEL_4;
  144. hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH;
  145. hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE;
  146. hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE;
  147. hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  148. hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  149. hdma1_stream3.Init.Mode = DMA_NORMAL;
  150. hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW;
  151. hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  152. if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) {
  153. Error_Handler();
  154. }
  155. __HAL_LINKDMA(&huart3, hdmatx, hdma1_stream3);
  156. HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
  157. HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
  158. HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
  159. HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
  160. HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);
  161. HAL_NVIC_EnableIRQ(USART3_IRQn);
  162. }
  163. /**
  164. * @brief
  165. */
  166. void AppHal::UART4_Init() {
  167. GPIO_InitTypeDef GPIO_InitStruct = {0};
  168. __HAL_RCC_UART4_CLK_ENABLE();
  169. __HAL_RCC_GPIOC_CLK_ENABLE();
  170. huart4.Instance = UART4;
  171. huart4.Init.BaudRate = 256000;
  172. huart4.Init.WordLength = UART_WORDLENGTH_8B;
  173. huart4.Init.StopBits = UART_STOPBITS_1;
  174. huart4.Init.Parity = UART_PARITY_NONE;
  175. huart4.Init.Mode = UART_MODE_TX_RX;
  176. huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  177. huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  178. if (HAL_UART_Init(&huart4) != HAL_OK) {
  179. Error_Handler();
  180. }
  181. /**UART4 GPIO Configuration
  182. PC10 ------> UART4_TX
  183. PC11 ------> UART4_RX
  184. */
  185. GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11;
  186. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  187. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  188. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  189. GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
  190. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  191. /* UART4 interrupt Init */
  192. HAL_NVIC_SetPriority(UART4_IRQn, 5, 0);
  193. HAL_NVIC_EnableIRQ(UART4_IRQn);
  194. /***********************************************************************************************************************
  195. * DMA_INIT *
  196. ***********************************************************************************************************************/
  197. /* UART4 DMA Init */
  198. /* UART4_RX Init */
  199. hdma1_stream2.Instance = DMA1_Stream2;
  200. hdma1_stream2.Init.Channel = DMA_CHANNEL_4;
  201. hdma1_stream2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  202. hdma1_stream2.Init.PeriphInc = DMA_PINC_DISABLE;
  203. hdma1_stream2.Init.MemInc = DMA_MINC_ENABLE;
  204. hdma1_stream2.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  205. hdma1_stream2.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  206. hdma1_stream2.Init.Mode = DMA_NORMAL;
  207. hdma1_stream2.Init.Priority = DMA_PRIORITY_LOW;
  208. hdma1_stream2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  209. if (HAL_DMA_Init(&hdma1_stream2) != HAL_OK) {
  210. Error_Handler();
  211. }
  212. __HAL_LINKDMA(&huart4, hdmarx, hdma1_stream2);
  213. /* UART4_TX Init */
  214. hdma1_stream4.Instance = DMA1_Stream4;
  215. hdma1_stream4.Init.Channel = DMA_CHANNEL_4;
  216. hdma1_stream4.Init.Direction = DMA_MEMORY_TO_PERIPH;
  217. hdma1_stream4.Init.PeriphInc = DMA_PINC_DISABLE;
  218. hdma1_stream4.Init.MemInc = DMA_MINC_ENABLE;
  219. hdma1_stream4.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
  220. hdma1_stream4.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
  221. hdma1_stream4.Init.Mode = DMA_NORMAL;
  222. hdma1_stream4.Init.Priority = DMA_PRIORITY_LOW;
  223. hdma1_stream4.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  224. if (HAL_DMA_Init(&hdma1_stream4) != HAL_OK) {
  225. Error_Handler();
  226. }
  227. __HAL_LINKDMA(&huart4, hdmatx, hdma1_stream4);
  228. }
  229. void AppHal::MX_I2C1_Init(void) {
  230. __HAL_RCC_GPIOB_CLK_ENABLE();
  231. __HAL_RCC_I2C1_CLK_ENABLE();
  232. hi2c1.Instance = I2C1;
  233. hi2c1.Init.ClockSpeed = 400000;
  234. hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  235. hi2c1.Init.OwnAddress1 = 0;
  236. hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  237. hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  238. hi2c1.Init.OwnAddress2 = 0;
  239. hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  240. hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  241. if (HAL_I2C_Init(&hi2c1) != HAL_OK) {
  242. Error_Handler();
  243. }
  244. GPIO_InitTypeDef GPIO_InitStruct = {0};
  245. /**I2C1 GPIO Configuration
  246. PB8 ------> I2C1_SCL
  247. PB9 ------> I2C1_SDA
  248. */
  249. GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9;
  250. GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  251. GPIO_InitStruct.Pull = GPIO_NOPULL;
  252. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  253. GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
  254. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  255. }
  256. void AppHal::MX_HSPI1_Init() {
  257. __HAL_RCC_SPI1_CLK_ENABLE();
  258. __HAL_RCC_GPIOA_CLK_ENABLE();
  259. // static_assert(MOTOR_SPI == SPI1);
  260. // static_assert(&MOTOR_SPI_INS == &hspi1);
  261. hspi1.Instance = SPI1;
  262. hspi1.Init.Mode = SPI_MODE_MASTER;
  263. hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  264. hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  265. hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  266. hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  267. hspi1.Init.NSS = SPI_NSS_SOFT;
  268. hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  269. hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  270. hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  271. hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  272. hspi1.Init.CRCPolynomial = 10;
  273. if (HAL_SPI_Init(&hspi1) != HAL_OK) {
  274. Error_Handler();
  275. }
  276. // static_assert(MOTOR_SPI_SCK == PA5);
  277. // static_assert(MOTOR_SPI_SDO == PA6);
  278. // static_assert(MOTOR_SPI_SDI == PA7);
  279. GPIO_InitTypeDef GPIO_InitStruct = {0};
  280. GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
  281. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  282. GPIO_InitStruct.Pull = GPIO_NOPULL;
  283. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  284. GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
  285. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  286. }