一、硬件准备
一个STM32开发板(STM32F429IGT6),及其电源线等;
一个ST-Link下载器及其连接线等。
二、软件准备
FreeRTOS源码(V9.0.0);
一个基于STM32 HAL库的基础例程(跑马灯例程)。
三、移植FreeRTOS
3.1 添加FreeRTOS源码至工程
添加源代码至工程目录,添加至工程分组中,添加相关头文件路径
编译,提示找不到 FreeRTOSConfig.h
3.2 添加 FreeRTOSConfig.h
文件来源:事先参考众多例程中的 FreeRTOSConfig.h 后,总结出来的
编译结果为:2个error。SVC_Handler() 和 PendSV_Handler() 这两个函数在 stm32f4xx_it.c 文件和 port.c 文件中重复定义了。
3.3 删除2个中断服务函数
将 stm32f4xx_it.c 文件和 stm32f4xx_it.h 文件中关于 SVC_Handler() 和 PendSV_Handler() 这两个函数的定义和声明都删掉,重新编译。
编译结果为:0 error, 0 warning。
3.4 重写1个中断服务函数
在 stm32f4xx_it.c 文件合适的位置添加如下两段代码:
extern void xPortSysTickHandler(void);
和
#include "FreeRTOS.h"
#include "task.h"
分别意为增加一个函数声明,以及包含支持该函数的两个头文件。
然后将 SysTick_Handler() 函数重写为如下:
void SysTick_Handler(void)
{
if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
{
xPortSysTickHandler();
}
HAL_IncTick();
}
所做更改为:在 SysTick_Handler() 函数中增加 FreeRTOS 的滴答处理函数。
3.5 替换 main.c 文件
将 main.c 文件替换为我们事先准备好的 main.c 文件。
关键字:FreeRTOS移植 STM32 HAL库
引用地址:
FreeRTOS移植,基于STM32 HAL库
推荐阅读最新更新时间:2024-11-10 18:23
STM32_ USART输入输出的讲解
今天总结STM32F103串口,以工程实例来讲述。 工程现象: 1.间断发送字符 2.接收中断(接收字符,并发送该字符) 软件工程下载地址(360云盘): https://yunpan.cn/cPEI3zyQ7UqJv访问密码 ee52 讲述分如下几点: 一、串口时钟 这里的“时钟配置”函数在bsp.c文件下面; 使能串口1(RCC_APB2Periph_USART1)时钟。 二、USART1引脚配置 这里的“USART1引脚配置”函数在usart.c文件下面; 初始化串口使用引脚, 包含端口引脚、频率、输出类型。 三、串口配置 这里的“串口配置”函数在usart.c文件下面; 详见每一句后面都有注释。
[单片机]
STM32学习之路之入门篇
2006年ARM公司推出了基于ARMV7架构的cortex系列的标准体系结构,以满足各种技术得不同性能要求,包含了A,R,M三个分工明确的系列 其中A系列面向复杂的尖端应用程序,用于运行开放式的复杂操作系统;R系列适合实时操作系统,M系列专门针对低成本的微控制领域。而我们今天要学习的STM32就是M3的处理器 STM32(M3)处理器的基本结构,基本结构如图所示,主要包括处理器核cortex-m3 core,NVIC,BUS MATRIS,FLASH转换,及断点单元,DWT,ITM,MPU,ETM,TPIU,ROM Table SW/SWJ-DP等模块,其中MPU和ETM单元是可选单元。 这些单元可分为内外两个层次,
[单片机]
STM32 GPIO的外部中断设计
一、前言 在之前针对 STM32 的G PI O相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读 信号 引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取 检测 操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EX TI 的结构,接着介绍外部中断的相关概念, 对STM32的IO外部中断EXTI有个初步的了解,在此基础上重点围绕IO外部中断EXTI的使用展开分析。 图1 外部中断设计 二、EXTI结构 EXTI(Ex te rnal interrupt/event controller)—外部中断/事件控制器,管理了控制器的
[单片机]
stm32内存分配
(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似 于数据结构中的栈。 (2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配 方式类似于数据结构中的链表。 (3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态 变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系 统自动释放。 (4)文字常量区:常量字符串就是存放在这里的。 (5)程序代码区:存放函数体的二进制代码。 例如: int a=0;
[单片机]
STM32普通定时器(TIM2-7)的时钟源
iframe id="iframe_0.9722621580585837" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://img.ph.126.net/Q5uD6HNVvCLylT0oKY6Z2w==/3353492872531932260.jpg?_=2389336&_=6218048%22%20style=%22border:none;max-width:1058px%22%3E%3Cscript%3Ewindow.onload%2
[单片机]
STM32单片机-输入捕获、FFT测频
一、硬件连接 1、电压信号处理电路仿真 图1.1.1 ----------------------------------------------------------- 2、单片机连接 主控MCU:STM32F103ZET6,LM293输出连接在PB0上检测电压信号的频率,如图1.1.1与图1.2.1所示。 图1.2.1 图1.2.2 如图1.2.2所示,注意其中的TIM3_CH2N是PWM捕获比较输出,TIM3_CH3才是输入捕获。 图1.2.3 ------------------------------------------------------------------------------
[单片机]
STM32控制舵机转动
舵机型号:SG5010舵机 因为舵机一般是5V工作电压或更高,之前担心STM32 输出管教是3.3V是否能否驱动起来,结果证明是可以的。 使用Time3 的channel 2作为PWM的定时器,输出50HZ方波,脉宽在0.5ms-2.5ms之间。 预分频prescaler设置成7200-1,period设置成200-1.pulse初始值是15,即处在中间位置。 200个period对应20ms,那么可以得到以下对应关系: 脉宽-------------角度----------pulse 0.5ms--------------0度---------5; 1.0ms------------45度---------10; 1.5ms--
[单片机]
STM32之五外部中断(下)
通过对外部中断理论的些许理解,这次我们利用两个按键key1和key2来控制led1和led2的亮灭,按key1进入key1的中断,控制对应的led亮灭,按key2进入key2的中断,控制相应的led的亮灭 同样,涉及到中断,我们要建立两个文件,exti.c及exti.h,首先来看看exti.c 用到中断,自然我们要用到stm32f10x_it.c函数,将中断响应函数放在里面,打开这个文件你会发现里面只是给出了部分中断函数,找来找去也没有我们需要的中断函数体,这时需要我们自己添加函数体,看下我添加的函数体: 但是这个函数名可不是随便起的,具体每个中断函数体的函数名怎么书写,我们可以打开startup_stm32f10x_hd.
[单片机]