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)通过输入参数,向函数指定要使用的是什么外设,如用(GPIOA,GPIO_Pin_5)选定PA5进行控制,用(USART1)来指定使用串口1外设。

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

(3)若为接收外部数据,则调用Read或Receive函数,读取函数的返回值来得到外部输入数据。对于其他外设,也有类似的控制数据输入输出函数。如用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()

STM32——库函数开发小结相关推荐

  1. stm32f407手册_入门篇 | STM32F407库函数开发L按键控制Led灯

    让文化·去旅行 点击上方蓝字可以关注我们哦 按键控制灯的亮与灭的效果图: 一.寄存器开发与库函数开发的优缺点 1.寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发效率相对低,产品周 ...

  2. 软件集成:Simulink与STM32联合开发

    本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个STM32工程中去编译软件.最后将软件下载到STM32F407中,通过串口输出Simulink计算的结果. 阅读本文需要有一 ...

  3. STM32应用开发实践教程:可控 LED 流水灯的设计与实现

    任务 2.1 LED 流水灯的应用开发 2.1.1 任务分析 本任务要求设计一个 LED 流水灯系统,具体要求如下. 系统通电时,两个 LED 以 2s 为周期(亮 1s,灭 1s)交替闪烁,并逐渐缩 ...

  4. STM32单片机开发环境搭建

    学习过程中不能追求大而全,掌握大部分就可以. 注册ST账号 进入ST官网:意法半导体STM | STM32/STM8微控制器 | MCU单片机 点击注册: 进入注册界面: 登录: 账号:1848712 ...

  5. 《STM32库开发实战指南:基于STM32F103(第2版)》——2.1节仿真器简介

    本节书摘来自华章社区<STM32库开发实战指南:基于STM32F103(第2版)>一书中的第2章,第2.1节仿真器简介,作者刘火良 杨森,更多章节内容可以访问云栖社区"华章社区& ...

  6. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...

  7. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...

  8. ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

    参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...

  9. pdfjs viewer 开发小结

    此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...

最新文章

  1. Python培训完可以找什么工作
  2. UVa1354 Mobile Computing
  3. 麦当劳java排班_学习肯德基排班管理系统
  4. ORIG1和ORIG2的运用
  5. 虚拟仪器的python实现_基于Python的虚拟仪器技术探究及实现.pdf
  6. 如此多的深度学习框架,为什么我选择PyTorch?
  7. Nginx、Apache工作原理以及nginx为何比Apache高效
  8. 浅谈Android选项卡(二)
  9. SpringMVC中实现文件上传
  10. rtmp代理php源码_RTMP直播系统(示例代码)
  11. 灵活的IP网络测试工具——— X-Launch
  12. win10计算机共享在哪,快速共享电脑文件,win10的“就近共享”功能了解一下!...
  13. 【GIT】搭建git项目
  14. java opennlp_java-使用openNLP maxent的训练模型
  15. Jxls使用模版导出excel表格公式无法自动计算失效解决
  16. 主力吸筹猛攻指标源码_主力吸筹猛攻指标源码-通达信公式 -程序化交易(CXH99.COM)...
  17. 【Ajax+】爬去今日头条图片
  18. bzoj 4417: [Shoi2013]超级跳马
  19. sklearn库:分类、回归、聚类、降维、模型优化、文本预处理实现用例(赶紧收藏)
  20. 亚马逊asin关键词排名追踪_善用亚马逊ABA数据,3步就能将关键词排名冲到首页...

热门文章

  1. 37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......
  2. 对SqlServer2008中的日志进行截断的方法
  3. 童继龙:论ERP顾问的创新分享与专业精神
  4. 用iptables实现G1手机cmwap代理上http网站[转]
  5. 实现一个通用的生产者消费者队列(c语言版本)
  6. Diango博客--21.实现简单的全文搜索
  7. 北海市计算机等级考试,2021上半年北海市计算机二级报名时间|网上报名入口【已开通】...
  8. php传中文给Java_完美解决PHP中文乱码(转) - - JavaEye技术网站
  9. windows环境下,如何在Pycharm下安装TensorFlow环境
  10. VS2010中 C++创建DLL图解