main.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under Ultimate Liberty license
  13. * SLA0044, the "License"; You may not use this file except in compliance with
  14. * the License. You may obtain a copy of the License at:
  15. * www.st.com/SLA0044
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22. #include "cmsis_os.h"
  23. /* Private includes ----------------------------------------------------------*/
  24. /* USER CODE BEGIN Includes */
  25. #include "queue.h"
  26. #include "task.h"
  27. #include "admisc/ad0x0_perf.h"
  28. #include "admisc/ad0x0_timman.h"
  29. #include "i2c/ad0x0_i2c_ext.h"
  30. //#include "st7735/fonts.h"
  31. //#include "st7735/st7735.h"
  32. #include "ssd1327/ssd1327.h"
  33. //#include "nrf24/RF24.h"
  34. #include "i2c/ad0x0_i2c.h"
  35. #include "i2c/ad0x0_i2c1.h"
  36. #include "i2c/ad0x0_i2c2.h"
  37. /* USER CODE END Includes */
  38. /* Private typedef -----------------------------------------------------------*/
  39. /* USER CODE BEGIN PTD */
  40. uint32_t ad0x0_frame_count=0;
  41. uint8_t ad0x0_perf=0;
  42. volatile uint8_t ready2render=false;
  43. void ad0x0_err(void){
  44. __asm("nop");
  45. }
  46. /* USER CODE END PTD */
  47. /* Private define ------------------------------------------------------------*/
  48. /* USER CODE BEGIN PD */
  49. /* USER CODE END PD */
  50. /* Private macro -------------------------------------------------------------*/
  51. /* USER CODE BEGIN PM */
  52. /* USER CODE END PM */
  53. /* Private variables ---------------------------------------------------------*/
  54. I2C_HandleTypeDef hi2c1;
  55. I2C_HandleTypeDef hi2c2;
  56. SPI_HandleTypeDef hspi1;
  57. SPI_HandleTypeDef hspi2;
  58. DMA_HandleTypeDef hdma_spi1_tx;
  59. DMA_HandleTypeDef hdma_spi2_rx;
  60. DMA_HandleTypeDef hdma_spi2_tx;
  61. TIM_HandleTypeDef htim4;
  62. UART_HandleTypeDef huart1;
  63. /* Definitions for defaultTask */
  64. osThreadId_t defaultTaskHandle;
  65. const osThreadAttr_t defaultTask_attributes = {
  66. .name = "defaultTask",
  67. .priority = (osPriority_t) osPriorityNormal,
  68. .stack_size = 128 * 4
  69. };
  70. /* Definitions for myTask02 */
  71. osThreadId_t myTask02Handle;
  72. const osThreadAttr_t myTask02_attributes = {
  73. .name = "myTask02",
  74. .priority = (osPriority_t) osPriorityNormal,
  75. .stack_size = 128 * 4
  76. };
  77. /* Definitions for myTask03 */
  78. osThreadId_t myTask03Handle;
  79. const osThreadAttr_t myTask03_attributes = {
  80. .name = "myTask03",
  81. .priority = (osPriority_t) osPriorityNormal,
  82. .stack_size = 128 * 4
  83. };
  84. /* USER CODE BEGIN PV */
  85. /* USER CODE END PV */
  86. /* Private function prototypes -----------------------------------------------*/
  87. void SystemClock_Config(void);
  88. static void MX_GPIO_Init(void);
  89. static void MX_DMA_Init(void);
  90. static void MX_I2C2_Init(void);
  91. static void MX_USART1_UART_Init(void);
  92. static void MX_I2C1_Init(void);
  93. static void MX_TIM4_Init(void);
  94. static void MX_SPI1_Init(void);
  95. static void MX_SPI2_Init(void);
  96. void StartDefaultTask(void *argument);
  97. void StartTask02(void *argument);
  98. void StartTask03(void *argument);
  99. /* USER CODE BEGIN PFP */
  100. void HAL_I2C_MasterRxCpltCallback (I2C_HandleTypeDef * hi2c){
  101. if(hi2c->Instance==hi2c1.Instance){
  102. ad0x0_i2c1_MasterRxCpltCallback();
  103. }else ad0x0_i2c2_MasterRxCpltCallback();
  104. }
  105. void HAL_I2C_MasterTxCpltCallback (I2C_HandleTypeDef * hi2c){
  106. if(hi2c->Instance==hi2c1.Instance){
  107. ad0x0_i2c1_MasterTxCpltCallback();
  108. }else ad0x0_i2c2_MasterTxCpltCallback();
  109. }
  110. void HAL_I2C_ErrorCallback (I2C_HandleTypeDef * hi2c){
  111. if(hi2c->Instance==hi2c1.Instance){
  112. ad0x0_i2c1_ErrorCallback();
  113. }else ad0x0_i2c2_ErrorCallback();
  114. }
  115. void HAL_I2C_AbortCpltCallback (I2C_HandleTypeDef * hi2c){
  116. if(hi2c->Instance==hi2c1.Instance){
  117. ad0x0_i2c1_AbortCpltCallback();
  118. }else ad0x0_i2c2_AbortCpltCallback();
  119. }
  120. /* USER CODE END PFP */
  121. /* Private user code ---------------------------------------------------------*/
  122. /* USER CODE BEGIN 0 */
  123. /* USER CODE END 0 */
  124. /**
  125. * @brief The application entry point.
  126. * @retval int
  127. */
  128. int main(void)
  129. {
  130. /* USER CODE BEGIN 1 */
  131. /* USER CODE END 1 */
  132. /* MCU Configuration--------------------------------------------------------*/
  133. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  134. HAL_Init();
  135. /* USER CODE BEGIN Init */
  136. /* USER CODE END Init */
  137. /* Configure the system clock */
  138. SystemClock_Config();
  139. /* USER CODE BEGIN SysInit */
  140. /* USER CODE END SysInit */
  141. /* Initialize all configured peripherals */
  142. MX_GPIO_Init();
  143. MX_DMA_Init();
  144. MX_I2C2_Init();
  145. MX_USART1_UART_Init();
  146. MX_I2C1_Init();
  147. MX_TIM4_Init();
  148. MX_SPI1_Init();
  149. MX_SPI2_Init();
  150. /* USER CODE BEGIN 2 */
  151. ad0x0_timman_init();
  152. ad0x0_i2c_ext_init(ad0x0_err);
  153. //ad0x0_usart_init();
  154. //GPS_Init(&huart1,gps_data_ready);
  155. ad0x0_i2c1_init(&hi2c1);
  156. /* USER CODE END 2 */
  157. /* Init scheduler */
  158. osKernelInitialize();
  159. /* USER CODE BEGIN RTOS_MUTEX */
  160. /* add mutexes, ... */
  161. /* USER CODE END RTOS_MUTEX */
  162. /* USER CODE BEGIN RTOS_SEMAPHORES */
  163. /* add semaphores, ... */
  164. /* USER CODE END RTOS_SEMAPHORES */
  165. /* USER CODE BEGIN RTOS_TIMERS */
  166. /* start timers, add new ones, ... */
  167. /* USER CODE END RTOS_TIMERS */
  168. /* USER CODE BEGIN RTOS_QUEUES */
  169. /* add queues, ... */
  170. /* USER CODE END RTOS_QUEUES */
  171. /* Create the thread(s) */
  172. /* creation of defaultTask */
  173. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  174. /* creation of myTask02 */
  175. myTask02Handle = osThreadNew(StartTask02, NULL, &myTask02_attributes);
  176. /* creation of myTask03 */
  177. myTask03Handle = osThreadNew(StartTask03, NULL, &myTask03_attributes);
  178. /* USER CODE BEGIN RTOS_THREADS */
  179. /* add threads, ... */
  180. /* USER CODE END RTOS_THREADS */
  181. /* USER CODE BEGIN RTOS_EVENTS */
  182. /* add events, ... */
  183. /* USER CODE END RTOS_EVENTS */
  184. /* Start scheduler */
  185. osKernelStart();
  186. /* We should never get here as control is now taken by the scheduler */
  187. /* Infinite loop */
  188. /* USER CODE BEGIN WHILE */
  189. while (1)
  190. {
  191. /* USER CODE END WHILE */
  192. /* USER CODE BEGIN 3 */
  193. }
  194. /* USER CODE END 3 */
  195. }
  196. /**
  197. * @brief System Clock Configuration
  198. * @retval None
  199. */
  200. void SystemClock_Config(void)
  201. {
  202. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  203. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  204. /** Initializes the RCC Oscillators according to the specified parameters
  205. * in the RCC_OscInitTypeDef structure.
  206. */
  207. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  208. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  209. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  210. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  211. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
  212. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
  213. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  214. {
  215. Error_Handler();
  216. }
  217. /** Initializes the CPU, AHB and APB buses clocks
  218. */
  219. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  220. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  221. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  222. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  223. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  224. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  225. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  226. {
  227. Error_Handler();
  228. }
  229. }
  230. /**
  231. * @brief I2C1 Initialization Function
  232. * @param None
  233. * @retval None
  234. */
  235. static void MX_I2C1_Init(void)
  236. {
  237. /* USER CODE BEGIN I2C1_Init 0 */
  238. /* USER CODE END I2C1_Init 0 */
  239. /* USER CODE BEGIN I2C1_Init 1 */
  240. /* USER CODE END I2C1_Init 1 */
  241. hi2c1.Instance = I2C1;
  242. hi2c1.Init.ClockSpeed = 400000;
  243. hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  244. hi2c1.Init.OwnAddress1 = 0;
  245. hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  246. hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  247. hi2c1.Init.OwnAddress2 = 0;
  248. hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  249. hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  250. if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  251. {
  252. Error_Handler();
  253. }
  254. /* USER CODE BEGIN I2C1_Init 2 */
  255. /* USER CODE END I2C1_Init 2 */
  256. }
  257. /**
  258. * @brief I2C2 Initialization Function
  259. * @param None
  260. * @retval None
  261. */
  262. static void MX_I2C2_Init(void)
  263. {
  264. /* USER CODE BEGIN I2C2_Init 0 */
  265. /* USER CODE END I2C2_Init 0 */
  266. /* USER CODE BEGIN I2C2_Init 1 */
  267. /* USER CODE END I2C2_Init 1 */
  268. hi2c2.Instance = I2C2;
  269. hi2c2.Init.ClockSpeed = 400000;
  270. hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
  271. hi2c2.Init.OwnAddress1 = 0;
  272. hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  273. hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  274. hi2c2.Init.OwnAddress2 = 0;
  275. hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  276. hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  277. if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  278. {
  279. Error_Handler();
  280. }
  281. /* USER CODE BEGIN I2C2_Init 2 */
  282. /* USER CODE END I2C2_Init 2 */
  283. }
  284. /**
  285. * @brief SPI1 Initialization Function
  286. * @param None
  287. * @retval None
  288. */
  289. static void MX_SPI1_Init(void)
  290. {
  291. /* USER CODE BEGIN SPI1_Init 0 */
  292. /* USER CODE END SPI1_Init 0 */
  293. /* USER CODE BEGIN SPI1_Init 1 */
  294. /* USER CODE END SPI1_Init 1 */
  295. /* SPI1 parameter configuration*/
  296. hspi1.Instance = SPI1;
  297. hspi1.Init.Mode = SPI_MODE_MASTER;
  298. hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  299. hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  300. hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  301. hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  302. hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
  303. hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
  304. hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  305. hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  306. hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  307. hspi1.Init.CRCPolynomial = 10;
  308. if (HAL_SPI_Init(&hspi1) != HAL_OK)
  309. {
  310. Error_Handler();
  311. }
  312. /* USER CODE BEGIN SPI1_Init 2 */
  313. /* USER CODE END SPI1_Init 2 */
  314. }
  315. /**
  316. * @brief SPI2 Initialization Function
  317. * @param None
  318. * @retval None
  319. */
  320. static void MX_SPI2_Init(void)
  321. {
  322. /* USER CODE BEGIN SPI2_Init 0 */
  323. /* USER CODE END SPI2_Init 0 */
  324. /* USER CODE BEGIN SPI2_Init 1 */
  325. /* USER CODE END SPI2_Init 1 */
  326. /* SPI2 parameter configuration*/
  327. hspi2.Instance = SPI2;
  328. hspi2.Init.Mode = SPI_MODE_MASTER;
  329. hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  330. hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  331. hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  332. hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  333. hspi2.Init.NSS = SPI_NSS_SOFT;
  334. hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  335. hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  336. hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  337. hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  338. hspi2.Init.CRCPolynomial = 10;
  339. if (HAL_SPI_Init(&hspi2) != HAL_OK)
  340. {
  341. Error_Handler();
  342. }
  343. /* USER CODE BEGIN SPI2_Init 2 */
  344. /* USER CODE END SPI2_Init 2 */
  345. }
  346. /**
  347. * @brief TIM4 Initialization Function
  348. * @param None
  349. * @retval None
  350. */
  351. static void MX_TIM4_Init(void)
  352. {
  353. /* USER CODE BEGIN TIM4_Init 0 */
  354. /* USER CODE END TIM4_Init 0 */
  355. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  356. TIM_MasterConfigTypeDef sMasterConfig = {0};
  357. /* USER CODE BEGIN TIM4_Init 1 */
  358. /* USER CODE END TIM4_Init 1 */
  359. htim4.Instance = TIM4;
  360. htim4.Init.Prescaler = 64;
  361. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  362. htim4.Init.Period = 1000;
  363. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  364. htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  365. if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  366. {
  367. Error_Handler();
  368. }
  369. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  370. if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  371. {
  372. Error_Handler();
  373. }
  374. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  375. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  376. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  377. {
  378. Error_Handler();
  379. }
  380. /* USER CODE BEGIN TIM4_Init 2 */
  381. HAL_TIM_Base_Start_IT(&htim4);
  382. /* USER CODE END TIM4_Init 2 */
  383. }
  384. /**
  385. * @brief USART1 Initialization Function
  386. * @param None
  387. * @retval None
  388. */
  389. static void MX_USART1_UART_Init(void)
  390. {
  391. /* USER CODE BEGIN USART1_Init 0 */
  392. /* USER CODE END USART1_Init 0 */
  393. /* USER CODE BEGIN USART1_Init 1 */
  394. /* USER CODE END USART1_Init 1 */
  395. huart1.Instance = USART1;
  396. huart1.Init.BaudRate = 9600;
  397. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  398. huart1.Init.StopBits = UART_STOPBITS_1;
  399. huart1.Init.Parity = UART_PARITY_NONE;
  400. huart1.Init.Mode = UART_MODE_TX_RX;
  401. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  402. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  403. if (HAL_UART_Init(&huart1) != HAL_OK)
  404. {
  405. Error_Handler();
  406. }
  407. /* USER CODE BEGIN USART1_Init 2 */
  408. /* USER CODE END USART1_Init 2 */
  409. }
  410. /**
  411. * Enable DMA controller clock
  412. */
  413. static void MX_DMA_Init(void)
  414. {
  415. /* DMA controller clock enable */
  416. __HAL_RCC_DMA1_CLK_ENABLE();
  417. /* DMA interrupt init */
  418. /* DMA1_Channel3_IRQn interrupt configuration */
  419. HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0);
  420. HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
  421. /* DMA1_Channel4_IRQn interrupt configuration */
  422. HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 5, 0);
  423. HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
  424. /* DMA1_Channel5_IRQn interrupt configuration */
  425. HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 5, 0);
  426. HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);
  427. }
  428. /**
  429. * @brief GPIO Initialization Function
  430. * @param None
  431. * @retval None
  432. */
  433. static void MX_GPIO_Init(void)
  434. {
  435. GPIO_InitTypeDef GPIO_InitStruct = {0};
  436. /* GPIO Ports Clock Enable */
  437. __HAL_RCC_GPIOA_CLK_ENABLE();
  438. __HAL_RCC_GPIOB_CLK_ENABLE();
  439. /*Configure GPIO pin Output Level */
  440. HAL_GPIO_WritePin(GPIOA, AD_DBG_S1_Pin|AD_DBG_S2_Pin|AD_DC_Pin|AD_NFR24_CE_Pin, GPIO_PIN_RESET);
  441. /*Configure GPIO pin Output Level */
  442. HAL_GPIO_WritePin(GPIOB, AD_RES_Pin|MPU6050_POWER_Pin, GPIO_PIN_RESET);
  443. /*Configure GPIO pin Output Level */
  444. HAL_GPIO_WritePin(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin, GPIO_PIN_SET);
  445. /*Configure GPIO pins : AD_DBG_S1_Pin AD_DBG_S2_Pin AD_DC_Pin AD_NFR24_CE_Pin */
  446. GPIO_InitStruct.Pin = AD_DBG_S1_Pin|AD_DBG_S2_Pin|AD_DC_Pin|AD_NFR24_CE_Pin;
  447. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  448. GPIO_InitStruct.Pull = GPIO_NOPULL;
  449. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  450. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  451. /*Configure GPIO pin : AD_RES_Pin */
  452. GPIO_InitStruct.Pin = AD_RES_Pin;
  453. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  454. GPIO_InitStruct.Pull = GPIO_NOPULL;
  455. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  456. HAL_GPIO_Init(AD_RES_GPIO_Port, &GPIO_InitStruct);
  457. /*Configure GPIO pins : MPU6050_POWER_Pin SPI2_NSS_Pin */
  458. GPIO_InitStruct.Pin = MPU6050_POWER_Pin|SPI2_NSS_Pin;
  459. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  460. GPIO_InitStruct.Pull = GPIO_NOPULL;
  461. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  462. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  463. /*Configure GPIO pin : NRF24_IRQ_Pin */
  464. GPIO_InitStruct.Pin = NRF24_IRQ_Pin;
  465. GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  466. GPIO_InitStruct.Pull = GPIO_NOPULL;
  467. HAL_GPIO_Init(NRF24_IRQ_GPIO_Port, &GPIO_InitStruct);
  468. /*Configure GPIO pin : MPU6050_IRQ_Pin */
  469. GPIO_InitStruct.Pin = MPU6050_IRQ_Pin;
  470. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  471. GPIO_InitStruct.Pull = GPIO_NOPULL;
  472. HAL_GPIO_Init(MPU6050_IRQ_GPIO_Port, &GPIO_InitStruct);
  473. /* EXTI interrupt init*/
  474. HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
  475. HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
  476. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  477. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  478. }
  479. /* USER CODE BEGIN 4 */
  480. /* USER CODE END 4 */
  481. /* USER CODE BEGIN Header_StartDefaultTask */
  482. /**
  483. * @brief Function implementing the defaultTask thread.
  484. * @param argument: Not used
  485. * @retval None
  486. */
  487. unsigned char buf1[33]={0,};
  488. unsigned char packet_str[]="P_ID \0";
  489. unsigned char frame_str[]="FRAME \0";
  490. unsigned char rssi_str[]="RSSI \0";
  491. unsigned char bufframe[12];
  492. unsigned char bufrssi[12];
  493. char sd_gps[32];
  494. char sd_time[12];
  495. packet_data_t spi1_data;
  496. ad0x0_gyrodata_s *pgd=&spi1_data.gyro;//p_gyro_data
  497. oled_desc_s oled1;
  498. /* USER CODE END Header_StartDefaultTask */
  499. void StartDefaultTask(void *argument)
  500. {
  501. /* USER CODE BEGIN 5 */
  502. /* Infinite loop */
  503. OLED_Init2(hi2c1.Instance, &oled1);
  504. ready2render=true;
  505. //oled1.OLED_test2();
  506. uint32_t frame=0;
  507. //oled1.clear();
  508. osDelay(1000);
  509. /* Infinite loop */
  510. for(;;)
  511. {
  512. if(0){
  513. ready2render=false;
  514. oled1.OLED_test2();
  515. osDelay(1000);
  516. }else{
  517. oled1.OLED_test3();
  518. osDelay(10);
  519. }
  520. }
  521. /* USER CODE END 5 */
  522. }
  523. /* USER CODE BEGIN Header_StartTask02 */
  524. /**
  525. * @brief Function implementing the myTask02 thread.
  526. * @param argument: Not used
  527. * @retval None
  528. */
  529. /* USER CODE END Header_StartTask02 */
  530. void StartTask02(void *argument)
  531. {
  532. /* USER CODE BEGIN StartTask02 */
  533. /* Infinite loop */
  534. for(;;)
  535. {
  536. ad0x0_i2c1_xqRecieveHandler();
  537. }
  538. /* USER CODE END StartTask02 */
  539. }
  540. /* USER CODE BEGIN Header_StartTask03 */
  541. /**
  542. * @brief Function implementing the myTask03 thread.
  543. * @param argument: Not used
  544. * @retval None
  545. */
  546. /* USER CODE END Header_StartTask03 */
  547. void StartTask03(void *argument)
  548. {
  549. /* USER CODE BEGIN StartTask03 */
  550. /* Infinite loop */
  551. for(;;)
  552. {
  553. if(ready2render)buf_render(&oled1);
  554. osDelay(10);
  555. }
  556. /* USER CODE END StartTask03 */
  557. }
  558. /**
  559. * @brief Period elapsed callback in non blocking mode
  560. * @note This function is called when TIM3 interrupt took place, inside
  561. * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  562. * a global variable "uwTick" used as application time base.
  563. * @param htim : TIM handle
  564. * @retval None
  565. */
  566. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  567. {
  568. /* USER CODE BEGIN Callback 0 */
  569. /* USER CODE END Callback 0 */
  570. if (htim->Instance == TIM3) {
  571. HAL_IncTick();
  572. }
  573. /* USER CODE BEGIN Callback 1 */
  574. /* USER CODE END Callback 1 */
  575. }
  576. /**
  577. * @brief This function is executed in case of error occurrence.
  578. * @retval None
  579. */
  580. void Error_Handler(void)
  581. {
  582. /* USER CODE BEGIN Error_Handler_Debug */
  583. /* User can add his own implementation to report the HAL error return state */
  584. ad0x0_err();
  585. __disable_irq();
  586. while (1)
  587. {
  588. }
  589. /* USER CODE END Error_Handler_Debug */
  590. }
  591. #ifdef USE_FULL_ASSERT
  592. /**
  593. * @brief Reports the name of the source file and the source line number
  594. * where the assert_param error has occurred.
  595. * @param file: pointer to the source file name
  596. * @param line: assert_param error line source number
  597. * @retval None
  598. */
  599. void assert_failed(uint8_t *file, uint32_t line)
  600. {
  601. /* USER CODE BEGIN 6 */
  602. /* User can add his own implementation to report the file name and line number,
  603. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  604. /* USER CODE END 6 */
  605. }
  606. #endif /* USE_FULL_ASSERT */
  607. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/