使用C++封装库在MDK上建STM32开发工程

2019-08-15来源: eefocus关键字:C++  封装库  MDK  STM32  开发工程

直接上一些片上硬件、一些常用器件的封装库GitHub链接: 

STM32F4:https://github.com/InfiniteYuan1/STM32F407DriverLib 

STM32F1:https://github.com/InfiniteYuan1/STM32f103DriverLib


用C++进行嵌入式程序开发,甚至是裸系统程序。开发起来比C语言更方便架构搭建与程序管理。


简单的一个例子使用USART

#include "USART.h"

USART com(1,115200);

void main()

{

    com<<"test stringrn";

    while(1)

    {


    }

}


使用片外资源的一个例子

#include "USART.h"

#include "DPPrint.h"

int main(void)

{

    USART com(USART1, 115200);

    DPPrint DP(com);

    DP.InitializePrint();

    DP.PrintPageStart(0,0,384,640,0);

    DP.rectangleDraw(0,0,384,576,5,1);

    while(1)

    {


    }

}


extern "C"

{

    void USART1_IRQHandler(void)    //----USART1 IRQ----//

    {

    #ifdef USE_GPS

        if(pGPS1){

            pGPS1->GPS_IRQHandler();

            return ;

        }

    #endif

    #ifdef USE_USART1

        pCOM1->IRQ();

    #endif

    #ifdef USE_USART1_DMA

        pCOM1->IRQ();

    #endif

    }

}


首先声明,这个main()所在的文件必须是以.cpp文件,不然编译当成C语言进行编译。C++可以调用C,C不能调用C++,这点要记住。


extern “C” { } 用于告诉编译器,大括号以内的东西以C的方式进行编译。因为原来.C的头文件被.CPP文件包含了,那么编译器便按C++的方式进行编译,导致与原来.C文件中定义的不一致,编译报错。


关键字:C++  封装库  MDK  STM32  开发工程

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic471211.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F103看门狗使用记录
下一篇:STM32 GPIO IIC学习

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ChargerLab爆料:iPhone 11或提供USB-C充电头

近日ChargerLab在推文中发表了一段微信对话,当中的消息提到了iPhone 11会标配USB-C的充电头,但iPhone机身依然采用的是Lightning端口,据称消息来自某业内企业高管。如果新iPhone的充电头和机身采用不同的端口,那就可以确认苹果会为用户提供一个转接头,而ChargerLab表示苹果会随机附赠这个转接头。这很有可能意味着苹果终于要抛弃现有的5W充电头了,因为新的USB-C充电头将可以提供更高的功率以及快充功能。由此猜测该充电头很可能与2018款iPad Pro提供的USB-C充电头(18W)是同样型号。
发表于 2019-08-22
ChargerLab爆料:iPhone 11或提供USB-C充电头

stm32103R8C6 捕捉2路pwm 串口打印捕捉数据

第一路使用定时器2的通道1,先捕捉一个上升沿,清楚所有数据开始捕捉下降沿,捕捉到下降沿后再捕捉一个上升沿。 第二路使用定时器4的通道4,使用其他通道的时候要注意,定时器的中断时CC4,设置上升沿和下降沿的时候也要改为通道4。//定时器2通道1输入捕获配置TIM_ICInitTypeDef TIM2_ICInitStructure;void TIM2_Cap_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
发表于 2019-08-22
stm32103R8C6 捕捉2路pwm 串口打印捕捉数据

C语言函数指针数组在ARM中断中的应用

一、函数指针的声明与初始化... int max_fun(int a, int b); /*函数指针的声明,声明了两个形参都为int类型,返回值为int类型的函数指针*/int (*fp)(int, int); /*指针初始化*/fp = max_fun;  //fp = &max_fun 也正确 /*函数指针初始化后的调用*/fp(a,b);       //(*fp)(a,b);也正确 ...二、函数指针的typedeftypedef void (*irq_func)(int); //定义一个数组,存放中断函数指
发表于 2019-08-22

S3C2440代码重定位分析

一、NAND启动此处NAND大小为256M,当从NAND启动时,0地址为片内SRAM,NOR不可见。由于NAND不支持XIP,所以在启动时,硬件自动复制NAND的前4K内容到片内4K的SRAM,若bin文件小于4K,则可以直接在SRAM上运行,若bin文件大于4K,片内SRAM已经满足不了需求,我们需要做的是利用这前4K的代码,完成将所有代码重定位至SDRAM(位于BANK6地址0X30000000,大小64M),然后CPU在SDRAM上运行代码。二、NOR启动此处的NOR大小为2M,当从NOR启动时,0地址为NOR,片内SRAM的地址为0X40000000,由于NOR支持XIP,所以低于2M的bin文件可以直接在NOR上运行,当b
发表于 2019-08-22

STM32F103C8T6定时器TIM4通道1、2输出PWM

这美妙的波形,真好,我他喵的终于把你弄出来了。STM32F103C8T6使用定时器TIM4进行双通道的PWM输出:下面的图是从STM32中文参考手册中截取的,定时器TIM4的通用和复用功能I/O我选用的是TIM4_CH1和TIM4_CH2也就是PB6和PB7输出。注意事项:输出PWM是属于IO口的复用功能,所以在设置GPIO_Mode的时候一定要设置为GPIO_Mode_AF_PP也就是推挽复用。我就是被这个卡了好长时间……,感觉自己蠢到家了。我是用的正点原子的精英板学的32,所以一些写代码的习惯都是学的正点原子的。下面是代码timer.c#include "timer.h"//TIM4 PWM部分初始化
发表于 2019-08-21
STM32F103C8T6定时器TIM4通道1、2输出PWM

stm32之USB应用实例(官方例程资料下载使用)

开发环境:Window 7开发工具:Keil uVision5硬件:stc32f103c8t6stm32系列芯片很多都拥有一个USB2.0全速的通讯接口,下面介绍怎么使用st官方的usb应用例程。首先从官网下载源码:https://my.st.com/content/my_st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32121.html需要登录才能下载,如果没有账号,注册一个也很快的。下载解压,打开
发表于 2019-08-20
stm32之USB应用实例(官方例程资料下载使用)

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved