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 ...
随机推荐
- Python先合并再排序
前几天遇到的美团笔试题 题目:大概要求输入两组数字,对这两组数值排序然后输出结果 思路:输入两组数,合并两组数,排序 list1 = raw_input("input some number ...
- Oracle知识分类之异常
Oracle异常分类 ...
- 在Hyper-V中安装和配置Ubuntu网络
http://www.abcde.cn/knowledgebase/845/Hyper-VUbuntu.html (文中的nameserver要改成自己路由器的IP:我的是192.168.2.1.) ...
- EntityFramework优缺点
高层视图: 改变在现有系统使用EntityFramework的优势是什么? • All -in-1框架的类映射表,需要编写映射代码, 并且是很难维护的. • 可维护性,易于理解的代码,无需创造大的数据 ...
- 《Git教程-廖雪峰》学习笔记
一.创建版本库 ①初始化一个Git仓库:git init ②添加文件到Git仓库:1.git add<file> ; 2.git commit 二.时光机穿梭 ①查看工作区状态,文件是否 ...
- 使用css使textbox输入内容自动变大写
<style type="text/css"> input[type="text"] { text-transform:uppercase; } & ...
- java 之return
return关键词有两个用法,一方面制定一个方法返回什么值,另一方面导致当前方法退出.
- 优化phpstorm运行卡顿问题!
在PHPSTORM中点击导航菜单:Help -> Edit Custom VM Options 如果是第一次点击,会提示是否新建配置文件,点击“是” 在弹出的编辑框末尾加上以下配置 -Dawt. ...
- 设置更新源和下载ferret
kali无法定位软件包 解决: deb http://http.kali.org/kali kali-rolling main non-free contrib kali可用的官方更新源(cd /et ...
- Testlink部署全攻略
部署前准备: xampp,我下载的链接:https://www.apachefriends.org/download.html Testlink,下载地址:https://sourceforge.ne ...