【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的频率闪烁 这样的使用心得多多益善。 多谢分享, :lol:lol:lol:lol多谢分享 多谢分享 多谢分享 期待楼主更高级应用的分享,不要浪费了这么高端的板子…… 谢谢分享 顶一下 :lol多谢分享
页:
[1]