Advertisement
Guest User

Untitled

a guest
Dec 29th, 2020
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.67 KB | None | 0 0
  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 BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22.  
  23. /* Private includes ----------------------------------------------------------*/
  24. /* USER CODE BEGIN Includes */
  25. #define DATA_LEN 4096
  26. /* USER CODE END Includes */
  27.  
  28. /* Private typedef -----------------------------------------------------------*/
  29. /* USER CODE BEGIN PTD */
  30.  
  31. /* USER CODE END PTD */
  32.  
  33. /* Private define ------------------------------------------------------------*/
  34. /* USER CODE BEGIN PD */
  35. /* USER CODE END PD */
  36.  
  37. /* Private macro -------------------------------------------------------------*/
  38. /* USER CODE BEGIN PM */
  39.  
  40. /* USER CODE END PM */
  41.  
  42. /* Private variables ---------------------------------------------------------*/
  43. ADC_HandleTypeDef hadc1;
  44. DMA_HandleTypeDef hdma_adc1;
  45.  
  46. TIM_HandleTypeDef htim1;
  47.  
  48. UART_HandleTypeDef huart2;
  49.  
  50. /* USER CODE BEGIN PV */
  51.  
  52. /* USER CODE END PV */
  53.  
  54. /* Private function prototypes -----------------------------------------------*/
  55. void SystemClock_Config(void);
  56. static void MX_GPIO_Init(void);
  57. static void MX_DMA_Init(void);
  58. static void MX_USART2_UART_Init(void);
  59. static void MX_ADC1_Init(void);
  60. static void MX_TIM1_Init(void);
  61. /* USER CODE BEGIN PFP */
  62.  
  63. /* USER CODE END PFP */
  64.  
  65. /* Private user code ---------------------------------------------------------*/
  66. /* USER CODE BEGIN 0 */
  67. int16_t data[DATA_LEN];
  68. volatile uint8_t adcDmaStarted = 0;
  69. volatile uint8_t adcDataAvailable = 0;
  70.  
  71. void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef* htim)
  72. {
  73. if ((htim->Instance == TIM1) && (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)) {
  74. if (!adcDmaStarted) {
  75. adcDmaStarted = 1;
  76. HAL_ADC_Start_DMA(&hadc1, (uint32_t*)data, DATA_LEN);
  77. }
  78. }
  79. }
  80.  
  81. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
  82. {
  83. adcDataAvailable = 1;
  84. }
  85. /* USER CODE END 0 */
  86.  
  87. /**
  88. * @brief The application entry point.
  89. * @retval int
  90. */
  91. int main(void)
  92. {
  93. /* USER CODE BEGIN 1 */
  94.  
  95. /* USER CODE END 1 */
  96.  
  97. /* MCU Configuration--------------------------------------------------------*/
  98.  
  99. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  100. HAL_Init();
  101.  
  102. /* USER CODE BEGIN Init */
  103.  
  104. /* USER CODE END Init */
  105.  
  106. /* Configure the system clock */
  107. SystemClock_Config();
  108.  
  109. /* USER CODE BEGIN SysInit */
  110.  
  111. /* USER CODE END SysInit */
  112.  
  113. /* Initialize all configured peripherals */
  114. MX_GPIO_Init();
  115. MX_DMA_Init();
  116. MX_USART2_UART_Init();
  117. MX_ADC1_Init();
  118. MX_TIM1_Init();
  119. /* USER CODE BEGIN 2 */
  120.  
  121. /* USER CODE END 2 */
  122.  
  123. /* Infinite loop */
  124. /* USER CODE BEGIN WHILE */
  125. while (1) {
  126. if (adcDataAvailable) {
  127. #ifdef __MBED__
  128. printf("Data available:\r\n");
  129. for (int i = 3660; i < (3660 + 50); i++) {
  130. printf("data[%d] = %d\r\n", i, data[i]);
  131. }
  132. #endif
  133. adcDataAvailable = 0;
  134. adcDmaStarted = 0;
  135. }
  136.  
  137. #ifdef __MBED__
  138. led1 = !led1;
  139. printf("blink\r\n");
  140. wait_ms(1000);
  141. #endif
  142. /* USER CODE END WHILE */
  143.  
  144. /* USER CODE BEGIN 3 */
  145. }
  146. /* USER CODE END 3 */
  147. }
  148.  
  149. /**
  150. * @brief System Clock Configuration
  151. * @retval None
  152. */
  153. void SystemClock_Config(void)
  154. {
  155. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  156. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  157. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  158.  
  159. /** Initializes the RCC Oscillators according to the specified parameters
  160. * in the RCC_OscInitTypeDef structure.
  161. */
  162. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  163. RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  164. RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  165. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  166. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  167. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  168. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  169. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  170. {
  171. Error_Handler();
  172. }
  173. /** Initializes the CPU, AHB and APB buses clocks
  174. */
  175. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  176. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  177. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  178. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  179. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  180. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  181.  
  182. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  183. {
  184. Error_Handler();
  185. }
  186. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  187. PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
  188. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  189. {
  190. Error_Handler();
  191. }
  192. }
  193.  
  194. /**
  195. * @brief ADC1 Initialization Function
  196. * @param None
  197. * @retval None
  198. */
  199. static void MX_ADC1_Init(void)
  200. {
  201.  
  202. /* USER CODE BEGIN ADC1_Init 0 */
  203.  
  204. /* USER CODE END ADC1_Init 0 */
  205.  
  206. ADC_ChannelConfTypeDef sConfig = {0};
  207.  
  208. /* USER CODE BEGIN ADC1_Init 1 */
  209.  
  210. /* USER CODE END ADC1_Init 1 */
  211. /** Common config
  212. */
  213. hadc1.Instance = ADC1;
  214. hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  215. hadc1.Init.ContinuousConvMode = ENABLE;
  216. hadc1.Init.DiscontinuousConvMode = DISABLE;
  217. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  218. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  219. hadc1.Init.NbrOfConversion = 1;
  220. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  221. {
  222. Error_Handler();
  223. }
  224. /** Configure Regular Channel
  225. */
  226. sConfig.Channel = ADC_CHANNEL_0;
  227. sConfig.Rank = ADC_REGULAR_RANK_1;
  228. sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
  229. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  230. {
  231. Error_Handler();
  232. }
  233. /* USER CODE BEGIN ADC1_Init 2 */
  234.  
  235. /* USER CODE END ADC1_Init 2 */
  236.  
  237. }
  238.  
  239. /**
  240. * @brief TIM1 Initialization Function
  241. * @param None
  242. * @retval None
  243. */
  244. static void MX_TIM1_Init(void)
  245. {
  246.  
  247. /* USER CODE BEGIN TIM1_Init 0 */
  248.  
  249. /* USER CODE END TIM1_Init 0 */
  250.  
  251. TIM_MasterConfigTypeDef sMasterConfig = {0};
  252. TIM_OC_InitTypeDef sConfigOC = {0};
  253. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  254.  
  255. /* USER CODE BEGIN TIM1_Init 1 */
  256.  
  257. /* USER CODE END TIM1_Init 1 */
  258. htim1.Instance = TIM1;
  259. htim1.Init.Prescaler = 0;
  260. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  261. htim1.Init.Period = 60000;
  262. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  263. htim1.Init.RepetitionCounter = 0;
  264. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  265. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  266. {
  267. Error_Handler();
  268. }
  269. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  270. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  271. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  272. {
  273. Error_Handler();
  274. }
  275. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  276. sConfigOC.Pulse = 0;
  277. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  278. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  279. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  280. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  281. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  282. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  283. {
  284. Error_Handler();
  285. }
  286. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  287. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  288. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  289. sBreakDeadTimeConfig.DeadTime = 0;
  290. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  291. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  292. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  293. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  294. {
  295. Error_Handler();
  296. }
  297. /* USER CODE BEGIN TIM1_Init 2 */
  298.  
  299. /* USER CODE END TIM1_Init 2 */
  300. HAL_TIM_MspPostInit(&htim1);
  301.  
  302. }
  303.  
  304. /**
  305. * @brief USART2 Initialization Function
  306. * @param None
  307. * @retval None
  308. */
  309. static void MX_USART2_UART_Init(void)
  310. {
  311.  
  312. /* USER CODE BEGIN USART2_Init 0 */
  313.  
  314. /* USER CODE END USART2_Init 0 */
  315.  
  316. /* USER CODE BEGIN USART2_Init 1 */
  317.  
  318. /* USER CODE END USART2_Init 1 */
  319. huart2.Instance = USART2;
  320. huart2.Init.BaudRate = 115200;
  321. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  322. huart2.Init.StopBits = UART_STOPBITS_1;
  323. huart2.Init.Parity = UART_PARITY_NONE;
  324. huart2.Init.Mode = UART_MODE_TX_RX;
  325. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  326. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  327. if (HAL_UART_Init(&huart2) != HAL_OK)
  328. {
  329. Error_Handler();
  330. }
  331. /* USER CODE BEGIN USART2_Init 2 */
  332.  
  333. /* USER CODE END USART2_Init 2 */
  334.  
  335. }
  336.  
  337. /**
  338. * Enable DMA controller clock
  339. */
  340. static void MX_DMA_Init(void)
  341. {
  342.  
  343. /* DMA controller clock enable */
  344. __HAL_RCC_DMA1_CLK_ENABLE();
  345.  
  346. /* DMA interrupt init */
  347. /* DMA1_Channel1_IRQn interrupt configuration */
  348. HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
  349. HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  350.  
  351. }
  352.  
  353. /**
  354. * @brief GPIO Initialization Function
  355. * @param None
  356. * @retval None
  357. */
  358. static void MX_GPIO_Init(void)
  359. {
  360. GPIO_InitTypeDef GPIO_InitStruct = {0};
  361.  
  362. /* GPIO Ports Clock Enable */
  363. __HAL_RCC_GPIOC_CLK_ENABLE();
  364. __HAL_RCC_GPIOD_CLK_ENABLE();
  365. __HAL_RCC_GPIOA_CLK_ENABLE();
  366. __HAL_RCC_GPIOB_CLK_ENABLE();
  367.  
  368. /*Configure GPIO pin Output Level */
  369. HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
  370.  
  371. /*Configure GPIO pin : B1_Pin */
  372. GPIO_InitStruct.Pin = B1_Pin;
  373. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  374. GPIO_InitStruct.Pull = GPIO_NOPULL;
  375. HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  376.  
  377. /*Configure GPIO pin : LD2_Pin */
  378. GPIO_InitStruct.Pin = LD2_Pin;
  379. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  380. GPIO_InitStruct.Pull = GPIO_NOPULL;
  381. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  382. HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
  383.  
  384. /* EXTI interrupt init*/
  385. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  386. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  387.  
  388. }
  389.  
  390. /* USER CODE BEGIN 4 */
  391.  
  392. /* USER CODE END 4 */
  393.  
  394. /**
  395. * @brief This function is executed in case of error occurrence.
  396. * @retval None
  397. */
  398. void Error_Handler(void)
  399. {
  400. /* USER CODE BEGIN Error_Handler_Debug */
  401. /* User can add his own implementation to report the HAL error return state */
  402. __disable_irq();
  403. while (1)
  404. {
  405. }
  406. /* USER CODE END Error_Handler_Debug */
  407. }
  408.  
  409. #ifdef USE_FULL_ASSERT
  410. /**
  411. * @brief Reports the name of the source file and the source line number
  412. * where the assert_param error has occurred.
  413. * @param file: pointer to the source file name
  414. * @param line: assert_param error line source number
  415. * @retval None
  416. */
  417. void assert_failed(uint8_t *file, uint32_t line)
  418. {
  419. /* USER CODE BEGIN 6 */
  420. /* User can add his own implementation to report the file name and line number,
  421. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  422. /* USER CODE END 6 */
  423. }
  424. #endif /* USE_FULL_ASSERT */
  425.  
  426. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  427.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement