目标:

在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 = ;
RCC_OscInitStruct.PLL.PLLN = ;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = ;
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()/); 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, , );
osThreadDef (LEDR_blink, osPriorityNormal, , ); void LEDG_blink(void const *argument) {
for (;;) {
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);
osDelay (); // Delay 500 ms
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET);
osDelay (); // Delay 500 ms
}
}
void LEDR_blink(void const *argument) {
for (;;) {
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_SET);
osDelay (); // Delay 500 ms
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET);
osDelay (); // 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 ();
}

STM32F429i-DISCO FreeRTOS keil STM32CubeMX的更多相关文章

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

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

  2. stm32CubeMx lwip + freeRTOS

    MCU: STM32F429IGT6 工具:STM32CubeMx  版本号 5.0.0 Keil uVersion5 目的:使用LWIP 实现简单的网络连通 一  简介 LWIP(Light Wei ...

  3. Keil环境中建立带FreeRTOS的STM32L项目

    本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按 ...

  4. 用STM32CubeMX创建FreeRTOS项目

    1. 目标, PG13,PG14双线程双闪灯. 2. 测试平台 stm32f429i-disco keil v5.13.0.0 CubeMx 4.8.0 3. 步骤 3.1 打开cube, PG13, ...

  5. 基于keil平台下STM32L系列移植FreeRTOS操作系统

    1,下载FreeRTOS https://www.freertos.org/a00104.html 点击下载后,会进入如下界面 之后会弹出下载界面,格式为.EXE,不用怀疑.不是木马. 等待下载完成, ...

  6. STM32CubeMX+Keil裸机代码风格(2)

    10.找到STM32cubeMx所建的工程目录,在工程目录的同级目录下新建一个文件夹用来存放自己写的代码 11.用notepad++打开keil的工程文件,在这里的<Group>前面加上 ...

  7. STM32CubeMX FreeRTOS定时器的使用

    配置STM32CubeMX如下 生成的Keil代码的创建启动定时器如下 /* Create the timer(s) */ /* definition and creation of myTimer0 ...

  8. STM32CubeMX+FreeRTOS 定时器os_timer的使用

    转载:https://blog.csdn.net/jacklondonjia/article/details/78497120在STM32CubeMX的FreeRTOS配置中,使能FreeRTOS的S ...

  9. Stm32CubeMx lwip+freeRTOS TCP 服务

    如何添加lwip参照上一篇   stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...

随机推荐

  1. Python先合并再排序

    前几天遇到的美团笔试题 题目:大概要求输入两组数字,对这两组数值排序然后输出结果 思路:输入两组数,合并两组数,排序 list1 = raw_input("input some number ...

  2. Oracle知识分类之异常

    Oracle异常分类                                                                                           ...

  3. 在Hyper-V中安装和配置Ubuntu网络

    http://www.abcde.cn/knowledgebase/845/Hyper-VUbuntu.html (文中的nameserver要改成自己路由器的IP:我的是192.168.2.1.) ...

  4. EntityFramework优缺点

    高层视图: 改变在现有系统使用EntityFramework的优势是什么? • All -in-1框架的类映射表,需要编写映射代码, 并且是很难维护的. • 可维护性,易于理解的代码,无需创造大的数据 ...

  5. 《Git教程-廖雪峰》学习笔记

    一.创建版本库 ①初始化一个Git仓库:git init ②添加文件到Git仓库:1.git add<file> ;  2.git commit 二.时光机穿梭 ①查看工作区状态,文件是否 ...

  6. 使用css使textbox输入内容自动变大写

    <style type="text/css"> input[type="text"] { text-transform:uppercase; } & ...

  7. java 之return

    return关键词有两个用法,一方面制定一个方法返回什么值,另一方面导致当前方法退出.

  8. 优化phpstorm运行卡顿问题!

    在PHPSTORM中点击导航菜单:Help -> Edit Custom VM Options 如果是第一次点击,会提示是否新建配置文件,点击“是” 在弹出的编辑框末尾加上以下配置 -Dawt. ...

  9. 设置更新源和下载ferret

    kali无法定位软件包 解决: deb http://http.kali.org/kali kali-rolling main non-free contrib kali可用的官方更新源(cd /et ...

  10. Testlink部署全攻略

    部署前准备: xampp,我下载的链接:https://www.apachefriends.org/download.html Testlink,下载地址:https://sourceforge.ne ...