C 语言使用标准库开发

前面的两种开发方式,适用于任何一款芯片,但需要仔细阅读《参考手册》找到对应寄存器,然后用指针变量指向寄存器。

ST公司为了让用户更快上手开发,产生用户粘性,将外设寄存器提前定义好,准备一些常用接口函数供用户使用,这就是标准库的雏形。

下面来感受下使用标准库的简便性。使用标准库通常不需要知道外设寄存器地址,只需要分析《开发板原理图》得知会用到哪一个引脚。

本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语 言使用标准库开发\”。

首先使用C语言需要设置栈,这些初始化操作标准库已经帮忙完成了,我们只需要编写主函数即可,如代码段 6.4.1 所示。

代码段 6.4.1 C 语言使用标准库开发(main.c)

#include "main.h"
#include "stm32f10x.h"
#include "driver_led.h"
void delay(volatile long i)
{
     
while (i--);
}
int main(void) {
     
// 初始化 LED
LedGpioInit();
// 点亮 LED 灯
while(1) {
     
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
delay(1000000);
GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET);
delay(1000000); } }
  • 5~8行:循环递减传入的变量i,实现延时效果;
  • 14行:调用编写的“LedGpioInit()”函数,初始化需要的GPIO,该函数定义在“driver_led.c”里,如代码段 6.4.2 所示;
  • 17~23行:循环修改GPIOB_ODR实现LED灯交替闪烁;这里不再涉及寄存器操作,只需要调用标准库提供的“GPIO_WriteBit()”函数即可,该函数需要三个参数,分别是:GPIO端口、该端口引脚号、电平高低。这里操作GPIOB 0引脚,因此传入“GPIOB”、“GPIO_Pin_0”、“Bit_SET”或“Bit_RESET”,使用这些宏定义,用户基本就无须查阅《参考手册》,上手相对容易很多;

代码段 6.4.2 GPIO 初始化(driver_led.c)

#include "driver_led.h"
/*
* 函数名:void LedGpioInit(void)
* 输入参数:无
* 输出参数:无
* 返回值:无
* 函数作用:初始化 LED 的引脚,配置为推挽输出
*/
void LedGpioInit(void) {
     
// 定义 GPIO 的结构体变量
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 LED 的 GPIO 对应的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 选择 LED 的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置为推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 引脚反转速度设置为快
// 初始化引脚配置
GPIO_Init(GPIOB, &GPIO_InitStructure); }
  • 15行:使用标准库提供的“RCC_APB2PeriphClockCmd()”,传入需要设置的外设名字、是否使能;
  • 13~22行:将GPIO属性封装为结构体,通过设置结构体成员的属性,完成对GPIO的设置;

以上代码就实现了对开发板三色灯的红色灯交替闪烁效果,读者可以打开配套资料的“5_程序源码\0_单片机编程模式的发展\ 3_C语言使用标准库开发\ Project\ Led_Standard.uvprojx”工程,编译、下载,体验效果。

使用标准库后,基本不涉及外设寄存器的地址,同时提供很多函数实现相关功能的操作,用户只要熟悉之后,很快就能举一反三,修改相关传入参数,实现自定义需求。


百问网技术论坛:
http://bbs.100ask.net/

百问网嵌入式视频官网:
https://www.100ask.net/index

百问网开发板:
淘宝:https://100ask.taobao.com/
天猫:https://weidongshan.tmall.com/

技术交流群(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
QQ群:869222007(已满)752871361

单片机-嵌入式Linux交流群:
QQ群:536785813

你可能感兴趣的:(单片机F103开发大全,嵌入式,单片机,c语言)