fjjjnk1234 发表于 2015-11-14 00:07:56

【NUCLEO-L476RG开发】FreeRTOS+LED_Toggle单任务

本帖最后由 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
OKProject->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的频率闪烁

yanhaijian 发表于 2015-11-14 09:41:41

这样的使用心得多多益善。

Paderboy 发表于 2015-11-14 10:22:44

多谢分享,

肽宰1 发表于 2015-11-14 10:34:53

:lol:lol:lol:lol多谢分享

党国特派员 发表于 2015-11-14 10:39:59

多谢分享

chendiand 发表于 2015-11-14 11:30:04

多谢分享

alvin_ 发表于 2015-11-14 11:41:33

期待楼主更高级应用的分享,不要浪费了这么高端的板子……

wamcncn 发表于 2015-11-14 13:47:48

谢谢分享

埃斯提爱慕 发表于 2015-11-14 21:53:47

zhx401327110 发表于 2019-4-16 10:07:23

:lol多谢分享
页: [1]
查看完整版本: 【NUCLEO-L476RG开发】FreeRTOS+LED_Toggle单任务