Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.17 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) 2019 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.  
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "main.h"
  23.  
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26.  
  27. /* USER CODE END Includes */
  28.  
  29. /* Private typedef -----------------------------------------------------------*/
  30. /* USER CODE BEGIN PTD */
  31.  
  32. /* USER CODE END PTD */
  33.  
  34. /* Private define ------------------------------------------------------------*/
  35. /* USER CODE BEGIN PD */
  36.  
  37. /* USER CODE END PD */
  38.  
  39. /* Private macro -------------------------------------------------------------*/
  40. /* USER CODE BEGIN PM */
  41.  
  42. /* USER CODE END PM */
  43.  
  44. /* Private variables ---------------------------------------------------------*/
  45. ADC_HandleTypeDef hadc1;
  46.  
  47. TIM_HandleTypeDef htim2;
  48. TIM_HandleTypeDef htim10;
  49. TIM_HandleTypeDef htim11;
  50.  
  51. /* USER CODE BEGIN PV */
  52.  
  53. int ciclo=90;
  54. int valor=0;
  55.  
  56. /* USER CODE END PV */
  57.  
  58. /* Private function prototypes -----------------------------------------------*/
  59. void SystemClock_Config(void);
  60. static void MX_GPIO_Init(void);
  61. static void MX_TIM2_Init(void);
  62. static void MX_TIM10_Init(void);
  63. static void MX_TIM11_Init(void);
  64. static void MX_ADC1_Init(void);
  65. static void MX_NVIC_Init(void);
  66. /* USER CODE BEGIN PFP */
  67.  
  68. /* USER CODE END PFP */
  69.  
  70. /* Private user code ---------------------------------------------------------*/
  71. /* USER CODE BEGIN 0 */
  72.  
  73. /* USER CODE END 0 */
  74.  
  75. /**
  76. * @brief The application entry point.
  77. * @retval int
  78. */
  79. int main(void)
  80. {
  81. /* USER CODE BEGIN 1 */
  82.  
  83. /* USER CODE END 1 */
  84.  
  85.  
  86. /* MCU Configuration--------------------------------------------------------*/
  87.  
  88. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  89. HAL_Init();
  90.  
  91. /* USER CODE BEGIN Init */
  92.  
  93. /* USER CODE END Init */
  94.  
  95. /* Configure the system clock */
  96. SystemClock_Config();
  97.  
  98. /* USER CODE BEGIN SysInit */
  99.  
  100. /* USER CODE END SysInit */
  101.  
  102. /* Initialize all configured peripherals */
  103. MX_GPIO_Init();
  104. MX_TIM2_Init();
  105. MX_TIM10_Init();
  106. MX_TIM11_Init();
  107. MX_ADC1_Init();
  108.  
  109. /* Initialize interrupts */
  110. MX_NVIC_Init();
  111. /* USER CODE BEGIN 2 */
  112. HAL_TIM_Base_Start_IT(&htim2);
  113.  
  114. /* USER CODE END 2 */
  115.  
  116. /* Infinite loop */
  117. /* USER CODE BEGIN WHILE */
  118. while (1)
  119. {
  120. HAL_ADC_Start(&hadc1);
  121. HAL_ADC_PollForConversion(&hadc1, 1000);
  122. valor=HAL_ADC_GetValue(&hadc1);
  123.  
  124. /* USER CODE END WHILE */
  125.  
  126. /* USER CODE BEGIN 3 */
  127. }
  128. /* USER CODE END 3 */
  129. }
  130.  
  131. /**
  132. * @brief System Clock Configuration
  133. * @retval None
  134. */
  135. void SystemClock_Config(void)
  136. {
  137. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  138. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  139.  
  140. /** Configure the main internal regulator output voltage
  141. */
  142. __HAL_RCC_PWR_CLK_ENABLE();
  143. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
  144. /** Initializes the CPU, AHB and APB busses clocks
  145. */
  146. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  147. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  148. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  149. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  150. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  151. RCC_OscInitStruct.PLL.PLLM = 8;
  152. RCC_OscInitStruct.PLL.PLLN = 84;
  153. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  154. RCC_OscInitStruct.PLL.PLLQ = 2;
  155. RCC_OscInitStruct.PLL.PLLR = 2;
  156. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  157. {
  158. Error_Handler();
  159. }
  160. /** Initializes the CPU, AHB and APB busses clocks
  161. */
  162. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  163. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  164. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  165. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  166. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  167. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  168.  
  169. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  170. {
  171. Error_Handler();
  172. }
  173. }
  174.  
  175. /**
  176. * @brief NVIC Configuration.
  177. * @retval None
  178. */
  179. static void MX_NVIC_Init(void)
  180. {
  181. /* EXTI9_5_IRQn interrupt configuration */
  182. HAL_NVIC_SetPriority(EXTI9_5_IRQn, 1, 0);
  183. HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
  184. /* TIM1_UP_TIM10_IRQn interrupt configuration */
  185. HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);
  186. HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
  187. /* TIM1_TRG_COM_TIM11_IRQn interrupt configuration */
  188. HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 0);
  189. HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn);
  190. /* TIM2_IRQn interrupt configuration */
  191. HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
  192. HAL_NVIC_EnableIRQ(TIM2_IRQn);
  193. /* EXTI15_10_IRQn interrupt configuration */
  194. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  195. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  196. }
  197.  
  198. /**
  199. * @brief ADC1 Initialization Function
  200. * @param None
  201. * @retval None
  202. */
  203. static void MX_ADC1_Init(void)
  204. {
  205.  
  206. /* USER CODE BEGIN ADC1_Init 0 */
  207.  
  208. /* USER CODE END ADC1_Init 0 */
  209.  
  210. ADC_ChannelConfTypeDef sConfig = {0};
  211.  
  212. /* USER CODE BEGIN ADC1_Init 1 */
  213.  
  214. /* USER CODE END ADC1_Init 1 */
  215. /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  216. */
  217. hadc1.Instance = ADC1;
  218. hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
  219. hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  220. hadc1.Init.ScanConvMode = DISABLE;
  221. hadc1.Init.ContinuousConvMode = ENABLE;
  222. hadc1.Init.DiscontinuousConvMode = DISABLE;
  223. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  224. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  225. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  226. hadc1.Init.NbrOfConversion = 1;
  227. hadc1.Init.DMAContinuousRequests = DISABLE;
  228. hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  229. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  230. {
  231. Error_Handler();
  232. }
  233. /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  234. */
  235. sConfig.Channel = ADC_CHANNEL_0;
  236. sConfig.Rank = 1;
  237. sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
  238. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  239. {
  240. Error_Handler();
  241. }
  242. /* USER CODE BEGIN ADC1_Init 2 */
  243.  
  244. /* USER CODE END ADC1_Init 2 */
  245.  
  246. }
  247.  
  248. /**
  249. * @brief TIM2 Initialization Function
  250. * @param None
  251. * @retval None
  252. */
  253. static void MX_TIM2_Init(void)
  254. {
  255.  
  256. /* USER CODE BEGIN TIM2_Init 0 */
  257.  
  258. /* USER CODE END TIM2_Init 0 */
  259.  
  260. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  261. TIM_MasterConfigTypeDef sMasterConfig = {0};
  262.  
  263. /* USER CODE BEGIN TIM2_Init 1 */
  264.  
  265. /* USER CODE END TIM2_Init 1 */
  266. htim2.Instance = TIM2;
  267. htim2.Init.Prescaler = 41999;
  268. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  269. htim2.Init.Period = 1999;
  270. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  271. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  272. if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  273. {
  274. Error_Handler();
  275. }
  276. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  277. if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  278. {
  279. Error_Handler();
  280. }
  281. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  282. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  283. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  284. {
  285. Error_Handler();
  286. }
  287. /* USER CODE BEGIN TIM2_Init 2 */
  288.  
  289. /* USER CODE END TIM2_Init 2 */
  290.  
  291. }
  292.  
  293. /**
  294. * @brief TIM10 Initialization Function
  295. * @param None
  296. * @retval None
  297. */
  298. static void MX_TIM10_Init(void)
  299. {
  300.  
  301. /* USER CODE BEGIN TIM10_Init 0 */
  302.  
  303. /* USER CODE END TIM10_Init 0 */
  304.  
  305. /* USER CODE BEGIN TIM10_Init 1 */
  306.  
  307. /* USER CODE END TIM10_Init 1 */
  308. htim10.Instance = TIM10;
  309. htim10.Init.Prescaler = 99;
  310. htim10.Init.CounterMode = TIM_COUNTERMODE_UP;
  311. htim10.Init.Period = 6999;
  312. htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  313. htim10.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  314. if (HAL_TIM_Base_Init(&htim10) != HAL_OK)
  315. {
  316. Error_Handler();
  317. }
  318. /* USER CODE BEGIN TIM10_Init 2 */
  319.  
  320. /* USER CODE END TIM10_Init 2 */
  321.  
  322. }
  323.  
  324. /**
  325. * @brief TIM11 Initialization Function
  326. * @param None
  327. * @retval None
  328. */
  329. static void MX_TIM11_Init(void)
  330. {
  331.  
  332. /* USER CODE BEGIN TIM11_Init 0 */
  333.  
  334. /* USER CODE END TIM11_Init 0 */
  335.  
  336. /* USER CODE BEGIN TIM11_Init 1 */
  337.  
  338. /* USER CODE END TIM11_Init 1 */
  339. htim11.Instance = TIM11;
  340. htim11.Init.Prescaler = 99;
  341. htim11.Init.CounterMode = TIM_COUNTERMODE_UP;
  342. htim11.Init.Period = 83;
  343. htim11.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  344. htim11.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  345. if (HAL_TIM_Base_Init(&htim11) != HAL_OK)
  346. {
  347. Error_Handler();
  348. }
  349. /* USER CODE BEGIN TIM11_Init 2 */
  350.  
  351. /* USER CODE END TIM11_Init 2 */
  352.  
  353. }
  354.  
  355. /**
  356. * @brief GPIO Initialization Function
  357. * @param None
  358. * @retval None
  359. */
  360. static void MX_GPIO_Init(void)
  361. {
  362. GPIO_InitTypeDef GPIO_InitStruct = {0};
  363.  
  364. /* GPIO Ports Clock Enable */
  365. __HAL_RCC_GPIOC_CLK_ENABLE();
  366. __HAL_RCC_GPIOA_CLK_ENABLE();
  367.  
  368. /*Configure GPIO pin Output Level */
  369. HAL_GPIO_WritePin(Gate_GPIO_Port, Gate_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_PULLUP;
  375. HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  376.  
  377. /*Configure GPIO pin : Gate_Pin */
  378. GPIO_InitStruct.Pin = Gate_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(Gate_GPIO_Port, &GPIO_InitStruct);
  383.  
  384. /*Configure GPIO pin : Detect_Pin */
  385. GPIO_InitStruct.Pin = Detect_Pin;
  386. GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  387. GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  388. HAL_GPIO_Init(Detect_GPIO_Port, &GPIO_InitStruct);
  389.  
  390. }
  391.  
  392. /* USER CODE BEGIN 4 */
  393.  
  394. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
  395. if(htim->Instance == TIM10){
  396. HAL_TIM_Base_Stop_IT(&htim10);
  397. HAL_GPIO_WritePin(Gate_GPIO_Port, Gate_Pin, 1);
  398. HAL_TIM_Base_Start_IT(&htim11);
  399. }
  400. if(htim->Instance == TIM11){
  401. HAL_GPIO_WritePin(Gate_GPIO_Port, Gate_Pin, 0);
  402. HAL_TIM_Base_Stop_IT(&htim11);
  403. }
  404. if(htim->Instance == TIM2){
  405. ciclo-=3;
  406. if(ciclo<=0){
  407. ciclo=0;
  408. }
  409. TIM10->PSC=ciclo;
  410. }
  411. }
  412.  
  413. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
  414. if(GPIO_Pin == Detect_Pin){
  415. TIM10->CNT=0;
  416. HAL_TIM_Base_Start_IT(&htim10);
  417. }
  418. if(GPIO_Pin == B1_Pin){
  419. ciclo+=10;
  420. if(ciclo>=91){
  421. ciclo=90;
  422. }
  423. }
  424. }
  425.  
  426.  
  427. /* USER CODE END 4 */
  428.  
  429. /**
  430. * @brief This function is executed in case of error occurrence.
  431. * @retval None
  432. */
  433. void Error_Handler(void)
  434. {
  435. /* USER CODE BEGIN Error_Handler_Debug */
  436. /* User can add his own implementation to report the HAL error return state */
  437.  
  438. /* USER CODE END Error_Handler_Debug */
  439. }
  440.  
  441. #ifdef USE_FULL_ASSERT
  442. /**
  443. * @brief Reports the name of the source file and the source line number
  444. * where the assert_param error has occurred.
  445. * @param file: pointer to the source file name
  446. * @param line: assert_param error line source number
  447. * @retval None
  448. */
  449. void assert_failed(uint8_t *file, uint32_t line)
  450. {
  451. /* USER CODE BEGIN 6 */
  452. /* User can add his own implementation to report the file name and line number,
  453. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  454. /* USER CODE END 6 */
  455. }
  456. #endif /* USE_FULL_ASSERT */
  457.  
  458. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement