你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
fjjjnk1234 提问时间:2015-11-14 00:07 /
本帖最后由 fjjjnk1234 于 2015-11-14 00:12 编辑

之前都是用标准外设库开发STM32,这次的STM32L476本来也想用标准外设库,但是在ST官网上貌似没有,顺便看了一下F7系列的,也没有找到。感觉HAL库是一种趋势,有一种新事物代替旧事物的感觉。所以,只能紧跟时代潮流,学习一下HAL库,体验一下STM32CubeMX自动生成代码的功能。第一次使用STM32CubeMX生成一个FreeRTOS单任务的程序,感觉还挺方便的。记录一下过程。
NewProject
1.png
切换到Board Selector标签,板子类型选择Nucleo64MCU系列STM32L4,就出现NUCLEO-L476RG这个板子
2.png
OK
3.png
从这张图可以很清晰地看出板子上唯一的LED和按键分别接在PA5PC13,以及晶振和USART对应的引脚

没用到按键就先把PC13的状态Reset_State
4.png
使能FreeRTOS,进入Configuration标签
5.png
配置GPIO
6.png
配置FREERTOS
7.png
新建任务LED_TOGGLE
8.png

OK
Project->Settings
9.png
注意:一定要全英文路径,不然会出现如下错误
10.png
然后Project->Generate Code就生成相关的代码了
11.png
打开工程文件,填充LED_ Toggle任务函数
  1. /* LED_Toggle_Task function */
  2. void LED_Toggle_Task(void const * argument)
  3. {
  4.   /* USER CODE BEGIN LED_Toggle_Task */
  5.   /* Infinite loop */
  6.   for(;;)
  7.   {
  8.                 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
  9.     osDelay(1000);
  10.   }
  11.   /* USER CODE END LED_Toggle_Task */
  12. }
复制代码
主函数的代码都是STM32 Cube生成好的,不需要修改,非常方便,这样一个简单的FreeRTOS单任务的程序就完成了
  1. int main(void)
  2. {

  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* MCU Configuration----------------------------------------------------------*/

  6.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  7.   HAL_Init();

  8.   /* Configure the system clock */
  9.   SystemClock_Config();

  10.   /* Initialize all configured peripherals */
  11.   MX_GPIO_Init();

  12.   /* USER CODE BEGIN 2 */

  13.   /* USER CODE END 2 */

  14.   /* USER CODE BEGIN RTOS_MUTEX */
  15.   /* add mutexes, ... */
  16.   /* USER CODE END RTOS_MUTEX */

  17.   /* USER CODE BEGIN RTOS_SEMAPHORES */
  18.   /* add semaphores, ... */
  19.   /* USER CODE END RTOS_SEMAPHORES */

  20.   /* USER CODE BEGIN RTOS_TIMERS */
  21.   /* start timers, add new ones, ... */
  22.   /* USER CODE END RTOS_TIMERS */

  23.   /* Create the thread(s) */
  24.   /* definition and creation of defaultTask */
  25.   osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  26.   defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  27.   /* definition and creation of LED_TOGGLE */
  28.   osThreadDef(LED_TOGGLE, LED_Toggle_Task, osPriorityNormal, 0, 128);
  29.   LED_TOGGLEHandle = osThreadCreate(osThread(LED_TOGGLE), NULL);

  30.   /* USER CODE BEGIN RTOS_THREADS */
  31.   /* add threads, ... */
  32.   /* USER CODE END RTOS_THREADS */

  33.   /* USER CODE BEGIN RTOS_QUEUES */
  34.   /* add queues, ... */
  35.   /* USER CODE END RTOS_QUEUES */


  36.   /* Start scheduler */
  37.   osKernelStart();
  38.   
  39.   /* We should never get here as control is now taken by the scheduler */

  40.   /* Infinite loop */
  41.   /* USER CODE BEGIN WHILE */
  42.   while (1)
  43.   {
  44.   /* USER CODE END WHILE */

  45.   /* USER CODE BEGIN 3 */

  46.   }
  47.   /* USER CODE END 3 */

  48. }
复制代码
系统内核启动后,LED_Toggle的任务就开始不断执行
编译,下载后,复位,就能看到LED以0.5Hz的频率闪烁
IMAG0215.jpg

评分

参与人数 1 ST金币 +15 收起 理由
沐紫 + 15

查看全部评分

收藏 3 评论9 发布时间:2015-11-14 00:07

举报

9个回答
yanhaijian 回答时间:2015-11-14 09:41:41
这样的使用心得多多益善。
Paderboy 回答时间:2015-11-14 10:22:44
多谢分享,
肽宰1 回答时间:2015-11-14 10:34:53
多谢分享
党国特派员 回答时间:2015-11-14 10:39:59
多谢分享 null - 副本 - 副本 - 副本.png null - 副本 - 副本 (3).png null - 副本 (2) - 副本.png null - 副本 (3).png null - 副本.png
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
多谢分享

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版