这次咱们整整库函数
这东西就是构建巨麻烦,但是写起来简单。我们在那些文件当中已经提前定义好了,不需要我们再去特意地去翻寄存器地址,方便编写程序。咱们一起看看这个东西怎么构建
老样子,建立新文件夹,里面建立个user文件夹。之后我们打开keil5,按要求构建(主要是要把本体构建在user文件夹内,然后选对机型)。我们可以看到objects,listings两个文件夹和两个其他文件(其中一个是.uvoptx文件)
之后在文件夹里新建三个文件夹,可以命名为obj,core,stm32f10x_fwlib(叫别的也行)
大概长这样(我早弄好了,所以看看视频里的效果吧)
之后像寄存器那样挪文件
这三步,这次就不多讲了
之后在这个界面添加文件
在每个文件夹之后,要再次添加对应文件,否则左侧的内容栏是不显示的。
这个时候运存程序会报错。我们需要进一步的操作
像寄存器那样去在魔术棒里的c/c++区里添加文件
这里注意,一定只添加inc文件,下边的别添加。
下一步弄一个宏定义
注意这步别忘了,否则绝大多数函数不可用。
好了,你已经学会构建基本框架了。接下来我们来学习走马灯。
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_2);
}
把这堆代码写在led.c当中。
(建立文件的话可以直接新建文件,这个时候在keil里会显示text1,text2等。咱们先保存到对应文件里【一般是存hardware里】,然后修改文件名称为led.c。led.h同理。一会我发放头文件的代码段)
里面有很多奇奇怪怪的名字,基本上都是GPIO这个,GPIO那个的,咱们可以去
图片中上边打开的几个文件中去翻定义,看看我们需要的内容。背不过也没事,进去翻定义就行
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
这段给led.h
#include "stm32f10x.h"
#include "led.h"
int main(void)
{
LED_Init();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
}
}
这段给main.c
再次注意,我这是迷你板,跟战舰板和经营板的寄存器地址不一样,一定注意甄别,别整错了。
然后下载运行即可。咱们可以用下载器,也可以用flymcu烧录进去。
多学点,咱学学串口操作。这次必须要用flyMCU了,仅仅靠下载器是不可以操作串口的。
串口设置的一般步骤可以总结为如下几个步骤:
1) 串口时钟使能,GPIO 时钟使能。
2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。
3) GPIO 初始化设置:要设置模式为复用功能。
4) 串口参数初始化:设置波特率,字长,奇偶校验等参数。
5) 开启中断并且初始化 NVIC,使能中断(如果需要开启中断才需要这个步骤)。
6) 使能串口。
7) 编写中断处理函数:函数名格式为 USARTxIRQHandler(x 对应串口号)。
代码
串口发送字符串:
前边的那一堆构建基本同理,不再赘述
大概整理一下,这次我们学习的是库函数的构建,库函数的走马灯,库函数的串口通信。
内容可能有些多,但是库函数相对简单。
库函数这东西,构建的时候累死个人,要多麻烦有多麻烦,但是等到我们真正去用的时候,比寄存器要简单得多。我就说嘛,谁没事去背寄存器的那一大堆地址(?)
这次的学习就到这里,谢谢观看。