STM32——库函数开发小结

STM32——库函数开发小结


宗旨:技术的学习是有限的,分享的精神是无限的。


基本上所有外设都有以下几类寄存器:【CR/DR/SR

(1)控制寄存器 xxx_CR(Control/Configuration Register):这类寄存器是用来配置、控制 相应 外 设 的 工 作 方 式 的 。 如 GPIOx_CRL、GPIOx_CRH, AFIO_EXTICR1~AFIO_EXTICR4,串口的 USART_CR1~USART_CR3等。

(2)数据寄存器 xxx_DR(Data Register):这类寄存器主要是存储了外设进行输出输入的数据。如 GPIOx_IDR、GPIOx_ODR、USART_DR 等。

(3)状态寄存器 xxx_SR(Status Register):这类寄存器主要存储了当前外设的运行状态,主要为一些标志位。如 USART_SR、ADC_SR等。

一、初始化

GPIO_InitTypeDef型的 GPIO_InitStructure 用来配置 GPIO;

NVIC_InitTypeDef型的 NVIC_InitStructure 用来配置 NVIC;

EXTI_InitTypeDef型的 EXTI_InitStructure 用来配置 EXTI;

USART_InitTypeDef型的 USART_InitStructure 用来配置 USART。

初始化结构体的控制参数,一般就是与相应外设的控制寄存器 xxx_CR 对应的。

使用ST库对外设进行初始化,一般有以下步骤:

1)定义一个xxx_InitTypeDef类型的初始化结构体。

2)根据使用需求,向这些初始化结构体的成员写入特定的控制参数。

3)填充好结构体之后,把这个结构体作为输入参数调用相应的外设库函数xxx_Init(),从而实现向寄存器写入控制参数,并配置好外设。

       如ADC_InitTypeDef, ADC_Init() , I2C_InitTypeDef ,I2C_Init() 等。它们的应用方法都是相同的,区别在于不同的外设其结构体成员不一样,可输入参数相应也不同。

 

二、数据的输入输出

       对外设的使用,一般涉及其输入和输出数据。如GPIO 的 输入输出 函 数: GPIO_ReadOutputDataBit()、GPIO_ReadInputData()、GPIO_SetBits();还有USART 的收发数据函数:USART_ReceiveData()、USART_SendData(),这类函数都是用于控制输入输出数据的。这些函数控制相应外设数据寄存器 DR 的内容,达到控制输入输出的目的。

1)通过输入参数,向函数指定要使用的是什么外设,如用(GPIOAGPIO_Pin_5)选定PA5进行控制,用(USART1)来指定使用串口1外设。

2)若向外输出数据,则调用Output Send函数,把将要输出的数据变量作为函数的输入参数。

3)若为接收外部数据,则调用ReadReceive函数,读取函数的返回值来得到外部输入数据。对于其他外设,也有类似的控制数据输入输出函数。如用ADC_GetConversionValue()函数来获取ADC转换所得到的数值;用I2C_SendData()函数来使用I 2 C接口进行发送数据。

 

三、状态位、标志位

         xxx_GetFlagStatus() 或 xxx_GetITStatus(),功能分别为获取事件标志位状态和中断标志位状态。xxx_ClearFlag() 或 xxx_ClearITPendingBit() 函数,功能分别为清除事件标志位和清除挂起的中断标志位。这四类函数都是对应到外设的 xxx_SR 寄存器的。

 

四、外设函数分类

函数名

功能

输入参数

返回值

具体函数举例

XXX_Init()

对外设进行初始化

XXX_InitTypeDef初始化类型结构体

void

GPIO_Init()

USART_Init()

XXX_DeInit

以系统默认的形式对外设进行初始化

将要进行默认初始化的外设名

void

USART_DeInit()

I2C_DeInit()

XXX_StructInit()

以默认数据填充初化结构体

将要进行默认填的xXX_InitTypeDef初始化类型结构体

void

GPIO_StructInit()

XXX_SendData()

使用外设发送数据

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

void

USART_SendData()

I2C_SendData()

XXX_ReceiveData()

获取外接收到的数据

XXX(相应的外设名)

返回接收到的数据

USART_ReceiveData()

I2C_ReceiveData()

XXX_GetFlagStatus()

检查外设事件标志位

要检查的事件标志名

返回标志位状态(SET或ESET)

USART_GetFlagStatus()

SDIO_GetFlagStatus()

XXX_GetITStatus()

检查中断标志

要检查的中断标志名(大部分跟事
件标志相同)

返回标志位状态 (SET或RESET)

USART_GetITStatus()

I2C_GetITStatus()

XXX_ClearFlag()

清除事件标志位

要清除的事件标志名

void

USART_ClearFlag() RTC_ClearFlag()

XXX_ClearITPendingBit()



清除挂起的中断标志位

要检查的中断标志名(大部分跟事件标志相同)

void

USART_ClearITPendingBit()

RTC_ClearITPendingBit()

XXX_ITConfig()

设置外设的中断

XXX(相应外设的名字);选择要开启外设的某种中断(如接收中断,发送完成中断);ENABLE 或DISABLE 中断

void

USART_ITConfig()

ADC_ITConfig()

XXX_Cmd()

使能或关闭外设

要 配 置 的 外 设名;ENABLE 或DISABLE

void

USART_Cmd()

TIM_Cmd()

XXX_DMACmd()要

配置外是否可 使用DMA 请求

配置的外设名;选择要配置DMA 请求 (DMA 接收请求,DMA 发 送 请求);ENABLE 或
DISABLE

void

USART_DMACmd()

SDIO_DMACmd()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

过年不回家,难受不

看电视,特别怕看到离别的情节,最近看「山海情」,也刚好看到。本着剧情不透露原则,我就不说里面的内容了。小时候,经历的都只能算是小别离了。小时候喜欢去外婆家,在外婆家不用干繁重的农活,父母…

lodap问题集锦

1、分页打印时,同一行显示在不同页内 ,调整行分页粒度 LODOP.SET_PRINT_STYLEA(0, "TableRowThickNess", 40); 转载于:https://www.cnblogs.com/feihusurfer/p/8482180.html

系统管理员节日 网民的感恩日

11月8日 “记者节"、 9月10日“教师节”、 5月12日“国际护士节”,职业节日的设立会提升公众对该职业的关注程度,该职业的形象也往往因节日而凸显,而作为让这个世界变平的,在幕后默默付出的系统管理者的心声又有谁听到了呢&a…

操作系统——内存管理

1、内存基本概念 1.1 主要功能 内存空间的分配与回收;地址转换内存保护:使用上下限寄存器或者重定位寄存器和界地址寄存器内存扩充:交换和覆盖内容共享 2、内存的分配与回收 2.1 连续分配方式 连续分配方式是指为一个用户程序分配一个连续…

解决一个驱动代码解耦合问题

之前解决的项目LCD设备兼容问题,在 a.c 文件里面定义了一个变量,然后在 b.c 里面使用 extern声明引用这个变量,通过这种方法可以在b.c中使用在a.c 里面初始化的变量。但是这中情况就会引起一个问题,就是驱动代码之间耦合了&#x…

STM32——DMA

STM32——DMA 宗旨:技术的学习是有限的,分享的精神是无限的。 DMA 是为CPU分担数据转移的工作。因为DMA的存在CPU才被解放出来,它可以在 DMA 转移数据的过程中同时进行数据运算、响应中断,大大提高效率。 1、DMA工作分析 数据传…

YOLOv8改进 | 主干篇 | 利用SENetV1改进网络结构 (ILSVRC冠军得主)

一、本文介绍 本文给大家带来的改进机制是SENet(Squeeze-and-Excitation Networks)其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而是一个可以和现有的任何一个模型相结合的模块(可以看作是一…

如何进入保护模式?

IA-32为操作系统及其软件的发展提供了大量的支持,它提供了4种操作模式: 1,Real Mode,汇编书中的实模式,工作方式相当于8086。 2,Protected Mode,保护模式,提供支持多任务环境的工作形式。 3,Virtual 8086 Mode,虚拟8086模式&#…

搭建Servlet在线视频

这个视频flash上传及在线播放,搞了我一天了,总算有点成果,但还有一些疑问没有解决,现在发这篇随笔,为的就是交流视频在线上传和观看的一些问题。 在线编辑器使用FCKEditor,首先是修改FCKEditor的配置文件&a…

操作系统——内存管理例题

1、关于分配策略例题 case1:某系统的空闲分区见下表,如有下列作业:96KB,20KB,200KB,分别采用首次适应算法和最佳适应算法来处理这些作业序列,哪种算法能满足该作业序列请求? 分区号…

STM32中C语言知识点:初学者必看,老鸟复习(长文总结)

说在前面的话一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法。其实C语言是可以边学单片机边学的,学单片机的一些例程中&…

STM32——ADC

STM32——ADC 宗旨:技术的学习是有限的,分享的精神是无限的。 一、ADC指标 有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行 ;ADC的结果可以左对齐或右对齐方式存储在 16…

时间复杂度和空间复杂度,一看就懂,面试前必过一遍

一、定义时间和空间是程序的一个硬性指标,一个用来衡量 代码执行的速度 ,一个用来衡量 存储空间的大小程序 数据结构 算法时间复杂度:就是执行程序的快慢,速度越快,时间复杂度就越好。空间复杂度:就是执…

Oracle数据库自动存储管理(ASM)

关于ASM的讨论很多,但是到底什么是ASM?ASM是一个有效的抽象层,使你的Oracle数据库可以与叫做diskgroups的抽象空间一起使用,而不是直接使用datafiles。这带来了很多好处,但是也要求学习一些新的概念、命令、使用和管理任务。所以…

数据结构——排序【仅用于考试】

1、简介 排序&#xff0c;是重新排列表中的元素&#xff0c;使表中的元素满足按关键字有序的过程 稳定性&#xff1a;选取两个元素Ri<Rj&#xff0c;经过排序算法之后&#xff0c;仍为Ri<Rj 不稳定的排序&#xff1a;【简单选择排序&#xff0c;快速排序&#xff0c;堆…

[UWP]做个调皮的BusyIndicator

1. 前言 最近突然想要个BusyIndicator。做过WPF开发的程序员对BusyIndicator应该不陌生&#xff0c;Extended WPF Toolkit 提供了BusyIndicator的开源实现&#xff0c;Silverlight Toolkit也有一个&#xff0c;这次想要把这个控件移植到UWP中。 2. 先说点正经的 2.1 BusyIndica…

STM32——I2C

STM32——I2C 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、I2C协议 I 2 C &#xff08;Inter-Integrated Circuit&#xff09;协议是由 Philips 公司开发的&#xff0c;由于它具备引脚少、硬件实现简单、可扩展性强、不需要如 USART、CAN 的外部…

C语言发展简史

1、起源C 语言最早的原型是 ALGOL 60 1963 年&#xff0c;剑桥大学将其发展成为 CPL(Combined Programing Language)。1967 年&#xff0c;剑桥大学的 Matin Richards 对 CPL 语言进行了简化&#xff0c;产生了 BCPL 语言。1970 年&#xff0c;美国贝尔实验室(Bell Labs)的 Ken…

Oracle 系统表大全

数据字典dict总是属于Oracle用户sys的。   1、用户&#xff1a;    select username from dba_users;   改口令    alter user spgroup identified by spgtest;   2、表空间&#xff1a;    select * from dba_data_files;    select * from dba_tablespaces…

Vim 命令

Vim 命令 (建议可以看看: Practical vim 里面有很多实用的技巧, 据说已经有人翻译并出版了,英文的电子版自己网上搜索即可) 移动:(注意是移动,也就是所谓的剪切再粘贴) m 例如: 将第10至20行内容移动到50行处 进入 normal mod: 命令: : 10,20m50 Enter (注意" : ")…