Guest User

Untitled

a guest
Aug 18th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.91 KB | None | 0 0
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32l1xx_hal.h"
  4. #include "cmsis_os.h"
  5.  
  6. /* USER CODE BEGIN Includes */
  7. #include "FreeRtOSConfig.h"
  8. #include "FreeRTOS.h"
  9. #include "task.h"
  10.  
  11. #define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
  12. /* USER CODE END Includes */
  13.  
  14. /* Private variables ---------------------------------------------------------*/
  15. SPI_HandleTypeDef hspi1;
  16. SPI_HandleTypeDef hspi2;
  17.  
  18. UART_HandleTypeDef huart2;
  19.  
  20. osThreadId defaultTaskHandle;
  21.  
  22. /* USER CODE BEGIN PV */
  23. /* Private variables ---------------------------------------------------------*/
  24. static QueueHandle_t xQueue = NULL;
  25. TaskHandle_t xHandle_SPI1;
  26. TaskHandle_t xHandle_SPI2;
  27. int SPIflag=0;
  28. /* USER CODE END PV */
  29.  
  30. /* Private function prototypes -----------------------------------------------*/
  31. void SystemClock_Config(void);
  32. static void MX_GPIO_Init(void);
  33. static void MX_USART2_UART_Init(void);
  34. static void MX_SPI1_Init(void);
  35. static void MX_SPI2_Init(void);
  36. void StartDefaultTask(void const * argument);
  37.  
  38. /* USER CODE BEGIN PFP */
  39. /* Private function prototypes -----------------------------------------------*/
  40. extern void prvSPI1Task ( void *pvParameters );
  41. extern void prvSPI2Task ( void *pvParameters );
  42. /* USER CODE END PFP */
  43.  
  44. /* USER CODE BEGIN 0 */
  45.  
  46. /* USER CODE END 0 */
  47.  
  48. /**
  49. * @brief The application entry point.
  50. *
  51. * @retval None
  52. */
  53. int main(void)
  54. {
  55. /* USER CODE BEGIN 1 */
  56.  
  57. /* USER CODE END 1 */
  58.  
  59. /* MCU Configuration----------------------------------------------------------*/
  60.  
  61. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  62. HAL_Init();
  63.  
  64. /* USER CODE BEGIN Init */
  65.  
  66. /* USER CODE END Init */
  67.  
  68. /* Configure the system clock */
  69. SystemClock_Config();
  70.  
  71. /* USER CODE BEGIN SysInit */
  72.  
  73. /* USER CODE END SysInit */
  74.  
  75. /* Initialize all configured peripherals */
  76. MX_GPIO_Init();
  77. MX_USART2_UART_Init();
  78. MX_SPI1_Init();
  79. MX_SPI2_Init();
  80. /* USER CODE BEGIN 2 */
  81.  
  82. /* USER CODE END 2 */
  83.  
  84. /* USER CODE BEGIN RTOS_MUTEX */
  85. /* add mutexes, ... */
  86. /* USER CODE END RTOS_MUTEX */
  87.  
  88. /* USER CODE BEGIN RTOS_SEMAPHORES */
  89. /* add semaphores, ... */
  90. /* USER CODE END RTOS_SEMAPHORES */
  91.  
  92. /* USER CODE BEGIN RTOS_TIMERS */
  93. /* start timers, add new ones, ... */
  94. /* USER CODE END RTOS_TIMERS */
  95.  
  96. /* Create the thread(s) */
  97. /* definition and creation of defaultTask */
  98. //osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  99. //defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
  100.  
  101. /* USER CODE BEGIN RTOS_THREADS */
  102. /* add threads, ... */
  103. /* USER CODE END RTOS_THREADS */
  104.  
  105. /* USER CODE BEGIN RTOS_QUEUES */
  106. /* add queues, ... */
  107. /* USER CODE END RTOS_QUEUES */
  108.  
  109.  
  110. /* Start scheduler */
  111. //osKernelStart();
  112.  
  113. /* We should never get here as control is now taken by the scheduler */
  114.  
  115. /* Infinite loop */
  116. /* USER CODE BEGIN WHILE */
  117. //while (1)
  118. //{
  119.  
  120. /* USER CODE END WHILE */
  121.  
  122. /* USER CODE BEGIN 3 */
  123. uint8_t Task1ErrorMessage[]="Firts task was *not* created successfully.nr";
  124. uint8_t Task2ErrorMessage[]="Second task was *not* created successfully.nr";
  125.  
  126. xQueue = xQueueCreate( 1, sizeof( uint32_t ) );
  127.  
  128. if( xQueue != NULL ){
  129.  
  130. if( xTaskCreate(prvSPI1Task, "SPI1", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, &xHandle_SPI1) != pdPASS){
  131. HAL_UART_Transmit(&huart2, Task1ErrorMessage, 50, 100 );
  132. }else{
  133. //vTaskSuspend( xHandle_ADC );
  134. }
  135.  
  136. if( xTaskCreate(prvSPI2Task, "SPI2", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, &xHandle_SPI2) != pdPASS){
  137. HAL_UART_Transmit(&huart2, Task2ErrorMessage, 50, 100 );
  138. }else{
  139. //vTaskSuspend( xHandle_ADC );
  140. }
  141. }
  142.  
  143. vTaskStartScheduler();
  144.  
  145. while(1);
  146.  
  147. //}
  148. /* USER CODE END 3 */
  149.  
  150. }
  151.  
  152. /**
  153. * @brief System Clock Configuration
  154. * @retval None
  155. */
  156. void SystemClock_Config(void)
  157. {
  158.  
  159. RCC_OscInitTypeDef RCC_OscInitStruct;
  160. RCC_ClkInitTypeDef RCC_ClkInitStruct;
  161.  
  162. /**Configure the main internal regulator output voltage
  163. */
  164. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  165.  
  166. /**Initializes the CPU, AHB and APB busses clocks
  167. */
  168. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  169. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  170. RCC_OscInitStruct.HSICalibrationValue = 16;
  171. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  172. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  173. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;
  174. RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2;
  175. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
  176. _Error_Handler(__FILE__, __LINE__);
  177. }
  178.  
  179. /**Initializes the CPU, AHB and APB busses clocks
  180. */
  181. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  182. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  183. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  184. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  185. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  186. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  187.  
  188. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK){
  189. _Error_Handler(__FILE__, __LINE__);
  190. }
  191.  
  192. /**Configure the Systick interrupt time
  193. */
  194. HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
  195.  
  196. /**Configure the Systick
  197. */
  198. HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  199.  
  200. /* SysTick_IRQn interrupt configuration */
  201. HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
  202. }
  203.  
  204. /* SPI1 init function */
  205. static void MX_SPI1_Init(void)
  206. {
  207.  
  208. /* SPI1 parameter configuration*/
  209. hspi1.Instance = SPI1;
  210. hspi1.Init.Mode = SPI_MODE_MASTER;
  211. hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  212. hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  213. hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  214. hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  215. hspi1.Init.NSS = SPI_NSS_HARD_INPUT;
  216. hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  217. hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  218. hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  219. hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  220. hspi1.Init.CRCPolynomial = 10;
  221. if (HAL_SPI_Init(&hspi1) != HAL_OK){
  222. _Error_Handler(__FILE__, __LINE__);
  223. }
  224.  
  225. }
  226.  
  227. /* SPI2 init function */
  228. static void MX_SPI2_Init(void)
  229. {
  230.  
  231. /* SPI2 parameter configuration*/
  232. hspi2.Instance = SPI2;
  233. hspi2.Init.Mode = SPI_MODE_SLAVE;
  234. hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  235. hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  236. hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  237. hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  238. hspi2.Init.NSS = SPI_NSS_HARD_INPUT;
  239. hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  240. hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  241. hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  242. hspi2.Init.CRCPolynomial = 10;
  243. if (HAL_SPI_Init(&hspi2) != HAL_OK){
  244. _Error_Handler(__FILE__, __LINE__);
  245. }
  246.  
  247. }
  248.  
  249. /* USART2 init function */
  250. static void MX_USART2_UART_Init(void)
  251. {
  252.  
  253. huart2.Instance = USART2;
  254. huart2.Init.BaudRate = 9600;
  255. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  256. huart2.Init.StopBits = UART_STOPBITS_1;
  257. huart2.Init.Parity = UART_PARITY_NONE;
  258. huart2.Init.Mode = UART_MODE_TX_RX;
  259. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  260. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  261. if (HAL_UART_Init(&huart2) != HAL_OK){
  262. _Error_Handler(__FILE__, __LINE__);
  263. }
  264.  
  265. }
  266.  
  267. /** Configure pins as
  268. * Analog
  269. * Input
  270. * Output
  271. * EVENT_OUT
  272. * EXTI
  273. */
  274. static void MX_GPIO_Init(void)
  275. {
  276.  
  277. /* GPIO Ports Clock Enable */
  278. __HAL_RCC_GPIOH_CLK_ENABLE();
  279. __HAL_RCC_GPIOA_CLK_ENABLE();
  280. __HAL_RCC_GPIOB_CLK_ENABLE();
  281.  
  282. }
  283.  
  284. /* USER CODE BEGIN 4 */
  285.  
  286. /* USER CODE END 4 */
  287.  
  288. /* StartDefaultTask function */
  289. void StartDefaultTask(void const * argument)
  290. {
  291.  
  292. /* USER CODE BEGIN 5 */
  293. /* Infinite loop */
  294. for(;;){
  295. osDelay(1);
  296. }
  297. /* USER CODE END 5 */
  298. }
  299.  
  300. /**
  301. * @brief Period elapsed callback in non blocking mode
  302. * @note This function is called when TIM6 interrupt took place, inside
  303. * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  304. * a global variable "uwTick" used as application time base.
  305. * @param htim : TIM handle
  306. * @retval None
  307. */
  308. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  309. {
  310. /* USER CODE BEGIN Callback 0 */
  311.  
  312. /* USER CODE END Callback 0 */
  313. if (htim->Instance == TIM6) {
  314. HAL_IncTick();
  315. }
  316. /* USER CODE BEGIN Callback 1 */
  317.  
  318. /* USER CODE END Callback 1 */
  319. }
  320.  
  321. /**
  322. * @brief This function is executed in case of error occurrence.
  323. * @param file: The file name as string.
  324. * @param line: The line in file as a number.
  325. * @retval None
  326. */
  327. void _Error_Handler(char *file, int line)
  328. {
  329. /* USER CODE BEGIN Error_Handler_Debug */
  330. /* User can add his own implementation to report the HAL error return state */
  331. while(1){
  332.  
  333.  
  334. }
  335. /* USER CODE END Error_Handler_Debug */
  336. }
  337.  
  338. #ifdef USE_FULL_ASSERT
  339. /**
  340. * @brief Reports the name of the source file and the source line number
  341. * where the assert_param error has occurred.
  342. * @param file: pointer to the source file name
  343. * @param line: assert_param error line source number
  344. * @retval None
  345. */
  346. void assert_failed(uint8_t* file, uint32_t line)
  347. {
  348. /* USER CODE BEGIN 6 */
  349. /* User can add his own implementation to report the file name and line number,
  350. tex: printf("Wrong parameters value: file %s on line %drn", file, line) */
  351. /* USER CODE END 6 */
  352. }
  353. #endif /* USE_FULL_ASSERT */
  354.  
  355. #include "main.h"
  356. #include "stm32l1xx_hal.h"
  357. #include "cmsis_os.h"
  358.  
  359. /* USER CODE BEGIN Includes */
  360. #include "FreeRtOSConfig.h"
  361. #include "FreeRTOS.h"
  362. #include "task.h"
  363.  
  364. extern SPI_HandleTypeDef hspi1;
  365. extern UART_HandleTypeDef huart2;
  366. extern int SPIflag;
  367.  
  368. void prvSPI1Task ( void *pvParameters )
  369. {
  370. while(1){
  371.  
  372. //HAL_UART_Transmit( &huart2, "Send SPI 123456rn", 17, 100);
  373.  
  374. HAL_SPI_Transmit( &hspi1, "SPI 123456", 11, 100);
  375.  
  376. vTaskDelay(500);
  377.  
  378. //HAL_UART_Transmit( &huart2, "Received : ", 11, 100);
  379. //HAL_UART_Transmit( &huart2, ReceiveBuf, 11, 100);
  380. //HAL_UART_Transmit( &huart2, "rn", 2, 100);
  381. }
  382.  
  383. }
  384.  
  385. #include "main.h"
  386. #include "stm32l1xx_hal.h"
  387. #include "cmsis_os.h"
  388.  
  389. /* USER CODE BEGIN Includes */
  390. #include "FreeRtOSConfig.h"
  391. #include "FreeRTOS.h"
  392. #include "task.h"
  393.  
  394. extern SPI_HandleTypeDef hspi2;
  395. extern UART_HandleTypeDef huart2;
  396. extern int SPIflag;
  397.  
  398. void prvSPI2Task ( void *pvParameters )
  399. {
  400. uint8_t ReceiveBuf[11];
  401.  
  402. while(1){
  403.  
  404. HAL_SPI_Receive( &hspi2, ReceiveBuf, 11, 100);
  405.  
  406. HAL_UART_Transmit( &huart2, "Received : ", 11, 10);
  407. HAL_UART_Transmit( &huart2, ReceiveBuf, 11, 10);
  408. HAL_UART_Transmit( &huart2, "rn", 2, 10);
  409. }
  410.  
  411. }
Add Comment
Please, Sign In to add comment