STM32F429i-DISCO FreeRTOS keil STM32CubeMX

目标:
在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的更多相关文章
- STM32F429I-DISCO 和GPS的亲热接触
第27章 GPS LCD显示教程 本期教程为大家解说GPS Global Positioning System(全球定位系统)的使用,.GPS是由美国国防部研制建立的一种具有全方位.全天候.全时段.高 ...
- stm32CubeMx lwip + freeRTOS
MCU: STM32F429IGT6 工具:STM32CubeMx 版本号 5.0.0 Keil uVersion5 目的:使用LWIP 实现简单的网络连通 一 简介 LWIP(Light Wei ...
- Keil环境中建立带FreeRTOS的STM32L项目
本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按 ...
- 用STM32CubeMX创建FreeRTOS项目
1. 目标, PG13,PG14双线程双闪灯. 2. 测试平台 stm32f429i-disco keil v5.13.0.0 CubeMx 4.8.0 3. 步骤 3.1 打开cube, PG13, ...
- 基于keil平台下STM32L系列移植FreeRTOS操作系统
1,下载FreeRTOS https://www.freertos.org/a00104.html 点击下载后,会进入如下界面 之后会弹出下载界面,格式为.EXE,不用怀疑.不是木马. 等待下载完成, ...
- STM32CubeMX+Keil裸机代码风格(2)
10.找到STM32cubeMx所建的工程目录,在工程目录的同级目录下新建一个文件夹用来存放自己写的代码 11.用notepad++打开keil的工程文件,在这里的<Group>前面加上 ...
- STM32CubeMX FreeRTOS定时器的使用
配置STM32CubeMX如下 生成的Keil代码的创建启动定时器如下 /* Create the timer(s) */ /* definition and creation of myTimer0 ...
- STM32CubeMX+FreeRTOS 定时器os_timer的使用
转载:https://blog.csdn.net/jacklondonjia/article/details/78497120在STM32CubeMX的FreeRTOS配置中,使能FreeRTOS的S ...
- Stm32CubeMx lwip+freeRTOS TCP 服务
如何添加lwip参照上一篇 stm32CubeMx lwip + freeRTOS 今天讲一下,如何添加TCP服务 LwIP 提供了三种编程接口,分别为 RAW/Callback API.NETC ...
随机推荐
- OC中的字典
// ********************不可变最字典***************** /* NSDictionary * dic = [NSDictionary dictionaryWithO ...
- Windowns 10打开此电脑缓慢问题的一种解决办法
上个月刚配的台式,i7 6700K + 16GB + PM961用起来爽得不行. 不过最近两天突然发现,打开"此电脑"总会卡住,窗口里面也不显示磁盘.地址栏缓慢刷新. 一般此类问题 ...
- 原生js拖拽
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 查看https是否支持ATS
nscurl --ats-diagnostics --verbose https://我的域名
- DNS CNAME的一些细节
1, 概述 DNS中的CNAME可以减轻运维压力,使得已有的DNS配置具有一定的灵活性和可扩展性.本文对CNAME中的一些细节做阐述, 使DNS服务器的运维人员和开发人员能合理地使用CNAME. 2, ...
- 安装hadoop集群服务器(hadoop1.2.1)
摘要:hadoop,一个分布式系统基础架构,可以充分利用集群的威力进行高速运算和存储.本文主要介绍hadoop的安装与集群服务器的配置. 准备文件: ▪ VMware11.0.0 ▪ Cen ...
- Java 动态代理作用是什么?
Java 动态代理作用是什么? 1 条评论 分享 默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...
- MongoDB安装及入门
下载 windows下的是3.2的版本 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/ mongodb采用27 ...
- Leetcode: Find Leaves of Binary Tree
Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all leaves ...
- struts-OGNL
特点 常用来访问值栈里对象属性的一种语言 通常由struts标签来解析执行 <%@ taglib prefix="s" uri="/struts-tags" ...