目标:

在STM32F429 Disco开发板上用FreeRTOS双线程点亮双闪led。

准备:

0. STM32F429i-DISCO

1. keil ARMMDK 5.13

2. STM32CubeMX 4.8

步骤:

1. 建立工程

keil - project - new project

2. 保存在硬盘上, 给工程起名字

3. 保存工程

同时弹出了器件选择界面, 选STM32F429ZITx

4. 上面界面点OK后出来了运行环境配置界面

展开CMSIS:RTOS and enable :Keil RTX :

Validation Output 区域显示了依赖组件, 点Resolve,然后OK

现在,需求的组件被添加进了工程(startup , RTX config, CMSIS系统文件)

5. GPIO和时钟配置。

打开cube

选好器件

    

配置时钟

然后生成代码

我要的是时钟的初始化和gpio的初始化

/** System Clock Configuration
*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;__PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 8;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 4;HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);}

初始化168M系统时钟

/** Configure pins as * Analog * Input * Output* EVENT_OUT* EXTI
*/
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;/* GPIO Ports Clock Enable */__GPIOH_CLK_ENABLE();__GPIOG_CLK_ENABLE();/*Configure GPIO pins : PG13 PG14 */GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_LOW;HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);}

初始化GPIO

把这两段代码加进main.c,并调用

6. 配置FreeRtos的时钟

打开RTX_Conf_CM.c文件, 文件下面有个configuration标签, 在这里配置168M时钟和上面匹配

8. 添加main函数

右键Source group 1, 选Add New Item to Group

Select User Code Template and click on  “CMSIS-RTOS ‘main’ function”. Click Add.

9. Edit the main program code. First add the CMSIS-RTOS RTX header. Right-click on a blank line at the beginning of the file main.c and from popup menu select Insert ‘#include files’. Include the header file cmsis_os.h.

10. Hal驱动

11. 写应用代码

添加LED.h, LED.H

/*------------------------------------------------------------------------ * File LED.h *----------------------------------------------------------------------*/
void Init_BlinkyThread ( void ); // Initialize thread

/*------------------------------------------------------------------------ * File LED.c *----------------------------------------------------------------------*/
#include "stm32f4xx.h" // Device header
#include "cmsis_os.h" // RTOS:Keil RTX header
#include "LED.h"
#include "stm32f4xx_hal.h"// Prototype function
void LEDG_blink(void const *argument);
void LEDR_blink(void const *argument);// Define blinky thread
osThreadDef (LEDG_blink, osPriorityNormal, 1, 0);
osThreadDef (LEDR_blink, osPriorityNormal, 1, 0); void LEDG_blink(void const *argument) {for (;;) { HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);osDelay (500); // Delay 500 ms
        HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET);osDelay (500); // Delay 500 ms
    }
}
void LEDR_blink(void const *argument) {for (;;) { HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET);osDelay (300); // Delay 500 ms
        HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET);osDelay (300); // Delay 500 ms
    }
}void Init_BlinkyThread (void) { osThreadCreate (osThread(LEDR_blink), NULL); // Create thread osThreadCreate (osThread(LEDG_blink), NULL); // Create thread
}

LED.c

12. 在main.c里面调用

/** main: initialize and start the system*/
int main (void) {SystemClock_Config();MX_GPIO_Init();osKernelInitialize (); // Initialize CMSIS-RTOS // create 'thread' functions that start executing, // example: tid_name = osThreadCreate (osThread(name), NULL); Init_BlinkyThread (); // Start Blinky thread //osThreadCreate (osThread(blink_LED), NULL); // Create thread osKernelStart (); // Start thread execution while (1);
}

转载于:https://www.cnblogs.com/zhaitao85/p/4641238.html

STM32F429i-DISCO FreeRTOS keil STM32CubeMX相关推荐

  1. keil + STM32CubeMX 开发stm32L0 踩坑

    keil + STM32CubeMX 开发stm32L0 踩坑 我个人喜欢下载东西全部走官网 不喜欢去下别人给的乱七八糟的资源. 原因有二,一.找到头疼,版本说不定还旧.二.病毒,和各种奇奇怪怪的网盘 ...

  2. STM32F429i disco 体验

    1. 开发板   官网http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1848/PF259090?s_searchtype=partn ...

  3. FreeRTOS学习记录

    FreeRTOS学习记录 前言 FreeRTOS学习记录 在STM32CubeMX中配置FreeRTOS 前言 本人小白,最近学习了FreeRTOS操作系统,打算做一点记录. 学习的过程中虽然做了点练 ...

  4. stm32的FreeRTOS移植

    目录 FreeRTOS移植到STM32F103步骤与注意事项 前言: 一.从官网下载最新版的FreeRTOS源码 二.IAR下移植FreeRTOS 三.MDK下移植FreeRTOS 总结: STM32 ...

  5. STM32CubeMX基于HAL库实现简单串口通信

    STM32CubeMX基于HAL库实现简单串口通信 板子:STM32F103C8 编译工具:Keil+STM32CubeMX 烧录工具:FlyMcu 串口调试程序:XCOM 实验要求: 1)设置波特率 ...

  6. 使用Keil仿真和SaleaeLogic16观察引脚电平变化

    使用Keil仿真和SaleaeLogic16观察引脚电平变化 在基于HAL库的RTC日历&时钟&uc_OS-III小试牛刀两个实验中中,在掌握Keil的仿真调试代码功能之外,也学习使用 ...

  7. 高精密库仑计DS2740驱动程序

    环境 单片机:STM32F030F4P6,@48MHz 编译环境:KEIL+STM32CUBEMX 代码 1.头文件: /*********************** DS2740BU:6.250u ...

  8. STM32F429I-DISCO 和GPS的亲热接触

    第27章 GPS LCD显示教程 本期教程为大家解说GPS Global Positioning System(全球定位系统)的使用,.GPS是由美国国防部研制建立的一种具有全方位.全天候.全时段.高 ...

  9. STM32F429I-DISCO 和GPS的亲密接触

    第27章 GPS LCD显示教程 本期教程为大家讲解GPS Global Positioning System(全球定位系统)的使用,.GPS是由美国国防部研制建立的一种具有全方位.全天候.全时段.高 ...

  10. 基于STM32HAL库使用ADC采样方式,检测电压值与自带芯片温度值

    目录 概述 1.原理图 2.STM32CubeMx工具配置 3.代码 1.串口(串口重映射打印配置) 2.ADC 3.main 4.运行结果 概述 主控芯片:STM32L051C8T6 IDE: ke ...

最新文章

  1. php类的测试用例,快速入门:集成 PHPUnit 编写测试用例
  2. html怎么使用伪类清除浮动,JS中使用 after 伪类清除浮动实例
  3. linux下各个目录里面都装了什么
  4. jeesite快速开发平台(三)----项目文件结构与配置文件详解
  5. TensorFlow RNN tutorial解读
  6. 在linux上安装jdk(转载)
  7. 为MyEclipse 9/10中的html/JSP编辑器添加代码自动提示
  8. NDK配置文件Android.mk简介
  9. mybatis源码解析 - 通过一个简单查询例子分析流程
  10. thinkphp LoginAction.class.php 登录模块
  11. 计算机机房配电线路图cad,配电线路图cad怎么画
  12. 电脑版微信打开内置浏览器
  13. 前端如何使用微信支付
  14. java与设计模式-观察者模式
  15. java for循环迭代_Java for循环棘手迭代
  16. Qt开发技术:Qt富文本(一)富文本介绍、文档结构
  17. 汽车仪表盘CAN总线实现
  18. 浏览器被23545等网站劫持,以Chrome为例亲测有效的两个解除劫持的方法
  19. 进入社会一周年的些许感悟和经历
  20. 南邮计算机与科学排名,南邮计算机全国排名

热门文章

  1. WIN10升级的做法有待友好设计
  2. 用imspost制作catia后处理_为什么我推荐你用3D打印技术制造模具?
  3. 云台山网络营销计划_山东云台山两日游|网络营销职业规划范文
  4. VC++如何获取目标程序的句柄hProcess
  5. carray 、clist、cmap
  6. vue 为全局变量赋值_在vue项目中 如何定义全局变量 全局函数
  7. oracle 启动 08103,数据库打开遭遇ORA-08103故障处理
  8. 自定义 线性布局_智能组件探索:这个工具栏会自动布局~
  9. 基于iframe的CFS(Cross Frame Script)和Clickjacking(点击劫持)攻击
  10. Lync 小技巧-8-超速-更新-地址簿