keil5使用c++编写stm32控制程序
一、前言
想着搞个新奇的玩意玩一玩来着,想用c++编写代码来控制stm32,结果在keil5中,把踩给我踩闷了,这里简单记录一下。注意一定要按照如下流程进行操作,一步都不要跟丢了。
二、配置图解
所需要的一些文件放在百度网盘了。
先把最新的库函数和CMSIS安装好。
我这里为了方便就直接安装在了keil5的文件夹路径里。

废话不多说,直接上图解。

记得把use microlib的勾选去掉。配置和我图片上一样就没问题。

那这样配置过后会不会就好用了?当然不是,还要使用最新的标准库函数才行。
如何配置以后方便移植勒?当然是这样操作啦。
这里用的是普中科技32f103zet6板子的案例教程。
如图,找到你工程目录下的CMSIS把之前老版本的删除掉。

注意自己找到你最新的CMSIS的安装路径。
再把你Keil_v5\ARM\Packs\ARM\CMSIS\5.9.0\CMSIS\Core\Include里边的文件全部复制过去。

在把Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include里边的system_stm32f10x.h 和Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Source里边的system_stm32f10x.c复制出来。 然后再继续在Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Source\ARM找到你对应单片机的后缀文件。



最后你工程目录的CMSIS下边就应该是这些文件。

2.再把Libraries下的STM32F10x_StdPeriph_Driver里的inc和src文件替换为最新的固件库的。
安装的最新的固件库的文件位置在Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\StdPeriph_Driver里。

3.替换user文件下的如下文件

找到文件路径在Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\StdPeriph_Driver\templates文件下

在找打之前的Keil_v5\ARM\Packs\Keil\STM32F1xx_DFP\2.4.0\Device\Include里的这个文件
用这些把之前的文件替换掉就行。

接下来先把你工程中的一些c结尾文件按如下配置

就可以编译运行了,但是直接运行会报错。

建议先进入stm32f10x_conf.h文件中把
”#include "RTE_Components.h"注释掉,因为我们按照做模板的配置操作的,没有进入之前的动态环境中去配置东西,如果选择了如下配置的东西就会在你的工程文件下生成RTE的一个文件夹。如果你选择了这样操作的话就不会报这个错误。如果要配置的话记得把依赖勾选完整,如果依赖勾选正确会显示绿色,如果不正确会显示黄色,这里不在赘述,纯粹是为你满足你们的好奇心。
当然现在也可以不用管,因为后边会配置自定义的串口输出,会勾选一些配置,到时候他就会自动生成这个RTE_Components.h所需要的环境。


这下配置好了,浅浅的点个灯吧,点灯大师已经准备上线了,直接操作。
写个led.h
/* LED时钟端口、引脚定义 */
#ifndef _led_H
#define _led_H
#include "system.h"
#define LED_PORT GPIOC
#define LED_PIN (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
#define LED_PORT_RCC RCC_APB2Periph_GPIOC
//这里是stm32的管脚的按位操作。
#define led1 PCout(1) //D2指示灯连接的是PC1管脚
#define led2 PCout(2) //D2指示灯连接的是PC2管脚
#ifdef __cplusplus
class Led{
public:
Led(){
LED_GPIO_Config();}
void LED_GPIO_Config(void);
void TurnOn( u16 port, bool status);
~Led(){
std::cout<<std::move("I am relased!")<<std::endl;};
private:
};
#endif
在写个led.cpp
#include "led.h"
void Led::LED_GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
RCC_APB2PeriphClockCmd(LED_PORT_RCC, ENABLE);
GPIO_InitStructure.GPIO_Pin = LED_PIN; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(LED_PORT, &GPIO_InitStructure); /* 初始化GPIO */
GPIO_SetBits(LED_PORT, LED_PIN); //将LED端口拉高,熄灭所有LED
}
void Led::TurnOn(u16 port, bool status)
{
if(status){
GPIO_ResetBits(LED_PORT, port);} //将LED端口拉高,熄灭所有LED
else{
GPIO_SetBits(LED_PORT, port);}
}
再写个main.cpp
#include "system.h"
int main(void)
{
SysTick_Init(72);
std::shared_ptr<Led> led = std::make_shared<Led>();
while(1

本文介绍了在Keil5环境下使用C++编写STM32控制程序的步骤,包括配置工程、重定向std::cout串口输出以及实现串口中断服务函数。通过示例展示了如何点亮LED和通过串口通信实现数据交互。
最低0.47元/天 解锁文章
3381

被折叠的 条评论
为什么被折叠?



