栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

固件库点灯-1时钟及结构体配置

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

固件库点灯-1时钟及结构体配置

用固件库点灯的原理和用寄存器点灯原理一样,都是通过配置寄存器,只不过固件库是把寄存器封装在一个结构体里直接调用即可。
1.在固件库的文件夹中的USER里新建LED文件夹,在LED文件夹中新建led.c和led.h文件。
把led.c新添加进USER里(双击USER然后添加)
led.h添加方式:在led.c里包含进去即可 #include “led.h”
然后编译led.c 编译完成后就可以看到led.h在led.c的目录下

2.定义声明
在led.c中加入库函数#include “stm32f10x.h”,并且写一个函数LED_Init(void)

既然写了一个函数,那就要在相对应的.h文件里进行声明,这里我们open #include “led.h” ,在这里声明。
声明方法:在#include "led.h"里 void LED_Init(void);(记住声明要加分号)并且led.h里不要忘了包含#include "stm32f10x.h"的库

3.调用
在main.c里调用函数,值得注意的是,main.c文件中不能直接包含#include “led.h” 。需要在魔术棒-c/c++中添加led.h的路径


4.在led.c里写函数

  1. 使能APB2的时钟GPIO
    ①怎么找时钟呢
    去外设FWLIB目录中rcc文件
    .c文件是包含一些宏定义的文件的,所以我们打开rcc.c直接找到里面的rcc.h文件,我们目标是找到外设配置的使能函数,我们直接复制过来到led.c这里

    第一个参数是外设。我们直接到rcc.h文件里找到APB2的GPIOC接口,复制过来,代替括号里的第一个参数。

    第二个参数是功能状态。如果不知道其类型可以到rcc.h里找到这个函数名然后Go To Definition,查看其定义类型。我们这里类型是枚举类型,定义了失能和使能。

    我们要使其打开,所以填入ENABLE
    至此,第一步的使能APB2的时钟GPIC配置完成,如图所示
  2. 结构体配置
    和第一步类似,我们到goio.c中找到gpio.h,在其中找到结构体的定义。我们看到第一个是引脚,第二个是速度,第三个是模式。

    新定义一个结构体 led_init后,想要访问可以直接加个小数点. 会自动弹出,如图

    结构体的参数在gpio.h中找,如图,GPIOMode的枚举类型如图所示:
    依次是模拟输入、浮空输入、下拉、上拉、开漏输出、推挽输出
    复用推挽输出(GPIO_Mode_AF_PP):用作串口的输出。
    复用开漏输出(GPIO_Mode_AF_OD):用在IIC。
    所有的开漏输出都需要接上拉电阻。

我们本次用到的是推挽输出,所以我们复制GPIO_Mode_Out_PP到输出模式,用以作为参数

同样的我们找到Pin的引脚,因为我们用到的是p13,所以我们找到GPIO_Pin_13,复制到led.c,

第三个是speed,同样也是枚举类型,我们找到后又因为点亮LED灯,其速度没有区别,所以选用10MHz。

至此,结构体已经定义完,如图

在定义完结构体之后,需要对结构体函数进行初始化,我们在gpio.h中找到另一个函数GPIO_Init

将其复制到led.c中,其口号内的第一个参数我们改为GPIOC,第二个因为要用指针类型,因此我们要对其取址。

保存编译后,我们发现一个错误:结构体定义要在时钟之前,因此将定义挪到时钟之前,再编译后发现0错误0警告。至此,我们时钟及结构体配置部分已完成。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号