本帖最后由 fjjjnk1234 于 2015-11-14 00:12 编辑
之前都是用标准外设库开发STM32,这次的STM32L476本来也想用标准外设库,但是在ST官网上貌似没有,顺便看了一下F7系列的,也没有找到。感觉HAL库是一种趋势,有一种新事物代替旧事物的感觉。所以,只能紧跟时代潮流,学习一下HAL库,体验一下STM32CubeMX自动生成代码的功能。第一次使用STM32CubeMX生成一个FreeRTOS单任务的程序,感觉还挺方便的。记录一下过程。 NewProject
切换到Board Selector标签,板子类型选择Nucleo64,MCU系列STM32L4,就出现NUCLEO-L476RG这个板子 OK 从这张图可以很清晰地看出板子上唯一的LED和按键分别接在PA5、PC13,以及晶振和USART对应的引脚
没用到按键就先把PC13的状态Reset_State 使能FreeRTOS,进入Configuration标签 配置GPIO 配置FREERTOS 新建任务LED_TOGGLE
OK Project->Settings 注意:一定要全英文路径,不然会出现如下错误 然后Project->Generate Code就生成相关的代码了 打开工程文件,填充LED_ Toggle任务函数 - /* LED_Toggle_Task function */
- void LED_Toggle_Task(void const * argument)
- {
- /* USER CODE BEGIN LED_Toggle_Task */
- /* Infinite loop */
- for(;;)
- {
- HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
- osDelay(1000);
- }
- /* USER CODE END LED_Toggle_Task */
- }
复制代码主函数的代码都是STM32 Cube生成好的,不需要修改,非常方便,这样一个简单的FreeRTOS单任务的程序就完成了 - int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* MCU Configuration----------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* Configure the system clock */
- SystemClock_Config();
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- /* USER CODE BEGIN 2 */
- /* USER CODE END 2 */
- /* USER CODE BEGIN RTOS_MUTEX */
- /* add mutexes, ... */
- /* USER CODE END RTOS_MUTEX */
- /* USER CODE BEGIN RTOS_SEMAPHORES */
- /* add semaphores, ... */
- /* USER CODE END RTOS_SEMAPHORES */
- /* USER CODE BEGIN RTOS_TIMERS */
- /* start timers, add new ones, ... */
- /* USER CODE END RTOS_TIMERS */
- /* Create the thread(s) */
- /* definition and creation of defaultTask */
- osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
- defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
- /* definition and creation of LED_TOGGLE */
- osThreadDef(LED_TOGGLE, LED_Toggle_Task, osPriorityNormal, 0, 128);
- LED_TOGGLEHandle = osThreadCreate(osThread(LED_TOGGLE), NULL);
- /* USER CODE BEGIN RTOS_THREADS */
- /* add threads, ... */
- /* USER CODE END RTOS_THREADS */
- /* USER CODE BEGIN RTOS_QUEUES */
- /* add queues, ... */
- /* USER CODE END RTOS_QUEUES */
-
- /* Start scheduler */
- osKernelStart();
-
- /* We should never get here as control is now taken by the scheduler */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
复制代码系统内核启动后,LED_Toggle的任务就开始不断执行 编译,下载后,复位,就能看到LED以0.5Hz的频率闪烁
|