我今天来讲一下我用STM32F030这颗MCU标准库开发的环境吧,首先要懂的建环境,需要复制那些标准库里的档案才能正常使用,没复制到的话也不用太担心,编译的时候会告诉你哪里有问题再往那方向去找就好,其他颗MCU也可比较办理差别并不大。
首先,先看看我的标准库里的档案:
首先会先创建1个资料夹,名称叫:STM32F030CC_FWlib_Template,(韧体模板)
底下有这4个子资料夹:
接下来我会一一介绍这些资料夹的作用跟需要复制甚麽档案,当然不创建这几个子资料夹也没关系,这只是养成1个整理的好习惯,下面会介绍各个资料夹的作用,了解後就会知道这样分的作用。
这个文件底下是放官方写好的库函式还有启动文件,首先点开资料夹,我还有创建两个文件档
这些都是MCU上店後先执行的程序档,有.c跟.h还有.s档,这三个档的作用我在边简单的描述一下,.h档式函数的定义和宣告,.c会include.h去实现函数的功能,.s则是启动的档案 MCU记忆体的最初烧录档案。
这底下有inc跟src资料夹,这是官方写好的外设功能函式库.c和.h
新增这资料夹是为了放编译完成的档案,最常用的是拿编译完成.HEX档,这个档也可以用来烧录主要是写进Flash里
开启专案後设定方法如下图步骤:
如上图
1.点1个像魔术棒的东西
2.点选Output
3.选择路径的选项,在选择自己所创建的Output
4.按OK~
创建专案选择的地方
自己写的.c和.h存放的地方
我先来讲解我led的范例吧,先来看我led底下的资料夹吧
再来看看我这两个写了什麽吧,首先是bsp_led.h
#ifndef __BSP_LED_H // 防止重复include编译上的错误
#define __BSP_LED_H //
#include "stm32f0xx.h" //引入官方写的标准库
void LED_GPIO_Config(void); //GPIO口的初始化
#endif /*__BSP_LED_H*/
再来是bsp_led.c实现函式的部分
// bsp board support package
#include "./led/bsp_led.h"
void LED_GPIO_Config(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE); //使用标准库里的RCC初始化函式
GPIO_InitTypeDef GPIO_InitStruct; //初始化结构体名称宣告
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;//要开启的脚位
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //配置成输出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; //IO口速度配置
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //IO口推挽模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //IO口上拉模式
GPIO_Init(GPIOB,&GPIO_InitStruct); //标准库里的GPIO初始化函式
}
再来是main.c里如何使用这个自己打好的库函式
打上我标记的这几行
#include "bsp_led.h"
int main(void)
{
LED_GPIO_Config();
GPIO_SetBits(GPIOB,GPIO_Pin_12); //PB12,高电位
GPIO_SetBits(GPIOB,GPIO_Pin_13); //PB13,拉高电位
GPIO_SetBits(GPIOB,GPIO_Pin_14); //PB14,拉高电位
}
这样就可以把这三个GPIO口拉high了~,103也可以照这方法编写,GPIO_SetBits这个函式是官方写好的,想要看写甚麽很简单,对着他按右键,选择F12那个选项
按了之後就会跑进来这,如下图
可以看他会多跑出红框的部分,再来看紫框是这个函式的说明,在看框部分里面有个BSRR!!,官方写好了,跟我们自己用暂存器开发是一样的,其实我昨天讲的暂存器开发跟官方写的是一样,讲到这边,我两种都大概说明一下了,假如有遇到什麽问题再下面提出来,我会尽力回答
这两种方法都懂是最好,很多刚学嵌入式的同学都很排斥前面的暂存器开发,想说我只要有功能就好快速开发就好,这样想是没甚麽错,但之後持续走这行一定会碰壁,官方没写好的就会不知道该怎麽修改,或着是要开发更进阶的功能。
<<: 30天打造品牌特色电商网站 Day.7 HTML基础
相关依赖包 https://www.npmjs.com/package/jsencrypt // 私...
今日文章目录: 需求说明 事前准备 需求说明 针对不同用途的toDoList。像是:工作用的toD...
mongoDB 除了可以让 line bot 使用之外,flask同样也可以去透过 pymongo ...
1、roxlabs roxlabs提供ip资源遍布全球220+国家与地区,每日高达9000万真实住宅...
前一章节介绍过混合模式,相信对滤镜也不会很陌生。「滤镜」是什麽呢?他可以做出与Photoshop相同...