Advertisement
kacperelwart

Untitled

Dec 5th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.46 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. #include "stdbool.h"
  24.  
  25. /* Private includes ----------------------------------------------------------*/
  26. /* USER CODE BEGIN Includes */
  27.  
  28. /* USER CODE END Includes */
  29.  
  30. /* Private typedef -----------------------------------------------------------*/
  31. /* USER CODE BEGIN PTD */
  32.  
  33. /* USER CODE END PTD */
  34.  
  35. /* Private define ------------------------------------------------------------*/
  36. /* USER CODE BEGIN PD */
  37.  
  38. /* USER CODE END PD */
  39.  
  40. /* Private macro -------------------------------------------------------------*/
  41. /* USER CODE BEGIN PM */
  42.  
  43. /* USER CODE END PM */
  44.  
  45. /* Private variables ---------------------------------------------------------*/
  46. UART_HandleTypeDef huart2;
  47.  
  48. /* USER CODE BEGIN PV */
  49.  
  50. /**
  51. * Buffer variables
  52. */
  53. enum {
  54. BUFFER_LENGTH = 256
  55. };
  56. char Rx_Buffer[BUFFER_LENGTH];
  57. char Tx_Buffer[BUFFER_LENGTH];
  58. uint8_t Rx_head = 0;
  59. uint8_t Rx_tail = 0;
  60. uint8_t Tx_head = 0;
  61. uint8_t Tx_tail = 0;
  62.  
  63. /**
  64. * Frame variables
  65. */
  66. uint8_t FRAME_ERROR = 0;
  67. uint8_t DETECT_FRAME_END = 0;
  68. uint8_t FRAME_END_DETECTED = 0;
  69.  
  70. /* USER CODE END PV */
  71.  
  72. /* Private function prototypes -----------------------------------------------*/
  73. void SystemClock_Config(void);
  74. static void MX_GPIO_Init(void);
  75. static void MX_USART2_UART_Init(void);
  76.  
  77. void check_frame_end(void);
  78. uint8_t frame(void);
  79. uint16_t length(void);
  80. /* USER CODE BEGIN PFP */
  81.  
  82. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
  83. if (huart->Instance == USART2) {
  84. Rx_head++;
  85. if (Rx_head >= BUFFER_LENGTH) {
  86. Rx_head = 0;
  87. }
  88. DETECT_FRAME_END = 1;
  89. if(FRAME_END_DETECTED == 0) {
  90. HAL_UART_Receive_IT(&huart2, &Rx_Buffer[Rx_head], 1);
  91. }
  92. }
  93. }
  94.  
  95. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
  96. if (huart->Instance == USART2) {
  97. Tx_tail++;
  98. if(Tx_tail != Tx_head) {
  99. HAL_UART_Transmit_IT(&huart2, &Rx_Buffer[Rx_tail], 1);
  100. } else {
  101. HAL_UART_Receive_IT(&huart2, &Rx_Buffer[Rx_head], 1);
  102. }
  103. }
  104. }
  105.  
  106. uint16_t length() {
  107. uint16_t len;
  108. if (Rx_head > Rx_tail) {
  109. len = Rx_head - Rx_tail;
  110. } else {
  111. len = BUFFER_LENGTH - (Rx_tail - Rx_head);
  112. }
  113. return len;
  114. }
  115.  
  116. uint8_t frame() {
  117. __disable_irq();
  118. for(uint8_t i=0; i<10; i++) {
  119. Tx_Buffer[Tx_head] = Rx_Buffer[Rx_tail];
  120. Tx_head++;
  121. Rx_tail++;
  122. }
  123. __enable_irq();
  124. if(FRAME_ERROR == 0) {
  125. HAL_UART_Transmit_IT(&huart2, &Tx_Buffer[Tx_tail], 1);
  126. }
  127. }
  128.  
  129. void check_frame_end() {
  130. if (length() >= 10 && Rx_Buffer[Rx_head-1] == 59) {
  131. FRAME_END_DETECTED = 1;
  132. frame();
  133. } else {
  134. FRAME_END_DETECTED = 0;
  135. DETECT_FRAME_END = 0;
  136. }
  137. }
  138. /* USER CODE END PFP */
  139.  
  140. /* Private user code ---------------------------------------------------------*/
  141. /* USER CODE BEGIN 0 */
  142.  
  143. /* USER CODE END 0 */
  144.  
  145. /**
  146. * @brief The application entry point.
  147. * @retval int
  148. */
  149. int main(void)
  150. {
  151. /* USER CODE BEGIN 1 */
  152.  
  153. /* USER CODE END 1 */
  154.  
  155.  
  156. /* MCU Configuration--------------------------------------------------------*/
  157.  
  158. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  159. HAL_Init();
  160.  
  161. /* USER CODE BEGIN Init */
  162.  
  163. /* USER CODE END Init */
  164.  
  165. /* Configure the system clock */
  166. SystemClock_Config();
  167.  
  168. /* USER CODE BEGIN SysInit */
  169.  
  170. /* USER CODE END SysInit */
  171.  
  172. /* Initialize all configured peripherals */
  173. MX_GPIO_Init();
  174. MX_USART2_UART_Init();
  175. /* USER CODE BEGIN 2 */
  176. HAL_UART_Receive_IT(&huart2, &Rx_Buffer[Rx_head], 1);
  177. /* USER CODE END 2 */
  178.  
  179. /* Infinite loop */
  180. /* USER CODE BEGIN WHILE */
  181. while (1)
  182. {
  183. /* USER CODE END WHILE */
  184. if (DETECT_FRAME_END == 1) {
  185. check_frame_end();
  186. }
  187. /* USER CODE BEGIN 3 */
  188. }
  189. /* USER CODE END 3 */
  190. }
  191.  
  192. /**
  193. * @brief System Clock Configuration
  194. * @retval None
  195. */
  196. void SystemClock_Config(void)
  197. {
  198. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  199. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  200.  
  201. /** Initializes the CPU, AHB and APB busses clocks
  202. */
  203. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  204. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  205. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  206. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  207. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
  208. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
  209. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  210. {
  211. Error_Handler();
  212. }
  213. /** Initializes the CPU, AHB and APB busses clocks
  214. */
  215. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  216. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  217. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  218. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  219. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  220. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  221.  
  222. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  223. {
  224. Error_Handler();
  225. }
  226. }
  227.  
  228. /**
  229. * @brief USART2 Initialization Function
  230. * @param None
  231. * @retval None
  232. */
  233. static void MX_USART2_UART_Init(void)
  234. {
  235.  
  236. /* USER CODE BEGIN USART2_Init 0 */
  237.  
  238. /* USER CODE END USART2_Init 0 */
  239.  
  240. /* USER CODE BEGIN USART2_Init 1 */
  241.  
  242. /* USER CODE END USART2_Init 1 */
  243. huart2.Instance = USART2;
  244. huart2.Init.BaudRate = 115200;
  245. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  246. huart2.Init.StopBits = UART_STOPBITS_1;
  247. huart2.Init.Parity = UART_PARITY_NONE;
  248. huart2.Init.Mode = UART_MODE_TX_RX;
  249. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  250. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  251. if (HAL_UART_Init(&huart2) != HAL_OK)
  252. {
  253. Error_Handler();
  254. }
  255. /* USER CODE BEGIN USART2_Init 2 */
  256.  
  257. /* USER CODE END USART2_Init 2 */
  258.  
  259. }
  260.  
  261. /**
  262. * @brief GPIO Initialization Function
  263. * @param None
  264. * @retval None
  265. */
  266. static void MX_GPIO_Init(void)
  267. {
  268. GPIO_InitTypeDef GPIO_InitStruct = {0};
  269.  
  270. /* GPIO Ports Clock Enable */
  271. __HAL_RCC_GPIOC_CLK_ENABLE();
  272. __HAL_RCC_GPIOD_CLK_ENABLE();
  273. __HAL_RCC_GPIOA_CLK_ENABLE();
  274. __HAL_RCC_GPIOB_CLK_ENABLE();
  275.  
  276. /*Configure GPIO pin Output Level */
  277. HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
  278.  
  279. /*Configure GPIO pin : B1_Pin */
  280. GPIO_InitStruct.Pin = B1_Pin;
  281. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  282. GPIO_InitStruct.Pull = GPIO_NOPULL;
  283. HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  284.  
  285. /*Configure GPIO pin : LD2_Pin */
  286. GPIO_InitStruct.Pin = LD2_Pin;
  287. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  288. GPIO_InitStruct.Pull = GPIO_NOPULL;
  289. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  290. HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
  291.  
  292. /* EXTI interrupt init*/
  293. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  294. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  295.  
  296. }
  297.  
  298. /* USER CODE BEGIN 4 */
  299.  
  300. /* USER CODE END 4 */
  301.  
  302. /**
  303. * @brief This function is executed in case of error occurrence.
  304. * @retval None
  305. */
  306. void Error_Handler(void)
  307. {
  308. /* USER CODE BEGIN Error_Handler_Debug */
  309. /* User can add his own implementation to report the HAL error return state */
  310.  
  311. /* USER CODE END Error_Handler_Debug */
  312. }
  313.  
  314. #ifdef USE_FULL_ASSERT
  315. /**
  316. * @brief Reports the name of the source file and the source line number
  317. * where the assert_param error has occurred.
  318. * @param file: pointer to the source file name
  319. * @param line: assert_param error line source number
  320. * @retval None
  321. */
  322. void assert_failed(uint8_t *file, uint32_t line)
  323. {
  324. /* USER CODE BEGIN 6 */
  325. /* User can add his own implementation to report the file name and line number,
  326. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  327. /* USER CODE END 6 */
  328. }
  329. #endif /* USE_FULL_ASSERT */
  330.  
  331. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement