库函数的使用

学了一周多的STM32,从最开始的点亮一盏灯到中断定时的使用,发现对于ST库使用的一些使用方法,现作一小结:

1、初始化结构体

a、定义一个xxxInitTypeDef 类型的结构体,比如GPIOInitTypeDef类型的GPIOInitStructure用来配置GPIO;

b、根据所使用的要求向这些结构体的成员中写入特定的控制参数,如GPIO_initStructure.GPIO_Pin=GPIO_Pin_13;

c、将结构体作为输入参数调用相应的外设库函数xxxInit(),实现向寄存器写入控制参数;

2、数据的输入与输出

a、先通过输入参数向函数制定要使用的外设是什么,比如用(GPIOA,GPIOPin5),选中PA5引脚进行控制;

b、进行写或者读数据操作,例如函数GPIO_WriteBit(GPIOA, u16 GPIO_Pin5, Bit_RESE) ,是对PA5进行写1操作;

c、如果是接收外部数据,则调用Read或Receive函数,读取函数返回值来得到外部输入数据。

3、状态位、标志位

在程序运行的过程中当我们需要知道一些外设的工作状态的时候,那么就会涉及一系列的标志检查函数:

a、名为 PPP_GetFlagStatus的函数,其功能为检查外设 PPP某标志位被设置与否,例如:TIM_ GetFlagStatus ;

b、名为 PPP_ClearFlag 的函数,其功能为清除外设 PPP标志位,例如:TIM_ ClearFlag ;

c、名为 PPP_GetITStatus 的函数,其功能为判断来自外设 PPP的中断发生与否,例如:TIM_ GetITStatus ;

d、名为 PPP_ClearITPendingBit 的函数,其功能为清除外设 PPP 中断待处理标志位,例如:TIM_ ClearITPendingBit 。

总结:

ST官方库有许多共同特点,在此对外设主要的共同函数进行一个简单的分类总结:

函数名 功能 输入参数 返回值
XXXInit() 对外设进行初始化
XXXinirTypeDef类型结构体

void

XXXDeInit()

以系统默认形式初始化外设 将要进行初始化的外设名 void

XXXStructInit()

以默认的数据填充初始化结构体 将要进行默认填充的XXXInitTypeDef类型结构体 void

XXXSendData()


使用外设发送数据


XXX相应的外设名;将要发送的数据


void


XXXReceiveData()


获取外设接收到的数据


XXX相应的外设名


返回接收到的数据


XXX_ GetFlagStatus ()

检测外设事件标志位 要检查的时间标志名 SET或RESET

XXX_ GetITStatus ()

检查中断标志 要检查的中断标志名 SET或RESET

XXX_ ClearFlag ()

清除事件标志位 要清除的事件标志名 void

XXX_ ClearITPendingBit ()

清除挂起的中断标志位 要检测的中断标志名 void

XXX_ITConfig ()

设置外设的中断 XXX相应得外设;选择开启外设的某中断 void

XXX_Cmd ()

使能或失能外设 配置外设名;ENABLE或DISABLE void

XXX_ DMACmd ()

配置外是否可使用DMA请求 配置外设名;选择要配置的DMA请求;ENABLE或DISABLE void
时间: 2024-10-12 04:15:03

库函数的使用的相关文章

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

C语言标准库函数qsort详解

1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 2 基本用法 使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷. qsort 的函数原型是

第二篇:库函数和系统调用的区别

前言 这是一对非常容易混淆的概念.对于用户( 应用程序开发者 )来说,并不一定要严格区分其意义.因为在用户看来,它们都是以C函数的形式出现的.但了解二者的区别对我们掌握整个计算机系统有很大帮助. 区别 1. 一部分库函数实现需要使用系统调用( 如 printf 库函数需要调用 write 系统调用 ) 2. 另一部分库函数实现不需要使用系统调用( 如strcpy 库函数不需要使用系统调用因为它不需要使用CPU特权指令 ) 3. 系统调用一定在内核空间执行,而库函数只有其中的系统调用部分执行时才会

系统调用和标准库函数的关联

1. 首先,现在的OS内核主要采用两种模式,整体的单内核模式(linux)和分层的微内核模式(Windows).单内核 模式的特点就是代码紧凑,执行速度快,各个模块之间是直接的调用关系,可以说最后一点既是优点,也是缺 点...有点就是执行速度快,缺点是内核看起来很乱,维护起来困难. 2. 无论是单内核,还是微内核,立体的体系结构从下到上大概都是分成这样几层:物理硬件,OS内核,OS服务, 应用程序.这四层结构中,OS内核起到一个“承上启下”的作用,向下管理物理硬件:向上为OS服务和应用程序 提供

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验要求: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/sys

Linux系统调用和库函数调用的区别

Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions).系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思.面向的是硬件.而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现.第二,可移植性.第三,底层调用本身的一些性能方面的缺陷.第四:让api也可以有了级别和专门的工作面向. 1.系统调用 系统调用提供的函数如open, close, read,

LINUX下c语言调用math.h库函数的注意事项

在Ubuntu上做C语言程序练习时,用到了sqrt函数,尽管在源文件中已包含了math.h头文件,但在编译的时候总是提示sqrt未定义.后来在网上查阅了相关资料,得知:在Linux系统下,C源文件若调用了math库里的函数,则编译时要加上-lm(是字母l,不是数字1),表示链接到math库.例如编译调用了math库函数的C源文件foo.c,可以用如下命令对其进行编译: $gcc -o foo -g -W foo.c -lm

卡尔曼滤波融合库函数+Arduino实例

-------这篇文章就作为放弃ACM比赛转行到电子设计大赛的开始吧,ACM比赛真的太需要时间了,准确的说对于我这样的菜鸟而言太浪费时间了,但是话说回来两年时间从中真心收获了很多 我是不理解卡尔曼滤波的原理啊,但是用这个库函数做个平衡车是绝对没问题 ,所以不理解没太大问题,只要知道它是用来融合加速度计 和 陀螺仪测定角度的.这个角度相对单纯求得的角度会更加精确,既然我弄不明白滤波的原理,下面我会特别详细的说明一下此库函数用到的变量,毕竟有很多人还是想弄明白的. Q_angle:相对于加速度计的噪

JNI java 调c++动态库函数,多值回传及乱码问题

一,JNI java 调c++动态库函数的问题 1.多参数回传 2.参数传递出现乱码 二,解决 1.使用byte[]数组传入c++,在生成的头文件里就会变成jbyteArray 类型 例如,java 中参数:byte[]account,头文件里参数变成jbyteArray account, 通过c++修改完account的值后,java要获取该值,直接使用 jbyte* jbAccount = (env)->GetByteArrayElements(env, account, 0); char*

sockets: DNS库函数的名字与地址转换

########################################################### DNS库函数的名字与地址转换 ###################################################### 通常给出的是数值地址(也就是IP地址),不方便记忆: 域名系统(DNS):用于在主机名字和IP地址之间的映射. /etc/resolv.conf包含本地名字服务器主机的IP地址. 获取名字和地址信息的方法: 1.使用DNS 2.静态主机文件