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)通过输入参数,向函数指定要使用的是什么外设,如用(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 或 |
void |
USART_DMACmd() SDIO_DMACmd() |
STM32——库函数开发小结相关推荐
- stm32f407手册_入门篇 | STM32F407库函数开发L按键控制Led灯
让文化·去旅行 点击上方蓝字可以关注我们哦 按键控制灯的亮与灭的效果图: 一.寄存器开发与库函数开发的优缺点 1.寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发效率相对低,产品周 ...
- 软件集成:Simulink与STM32联合开发
本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个STM32工程中去编译软件.最后将软件下载到STM32F407中,通过串口输出Simulink计算的结果. 阅读本文需要有一 ...
- STM32应用开发实践教程:可控 LED 流水灯的设计与实现
任务 2.1 LED 流水灯的应用开发 2.1.1 任务分析 本任务要求设计一个 LED 流水灯系统,具体要求如下. 系统通电时,两个 LED 以 2s 为周期(亮 1s,灭 1s)交替闪烁,并逐渐缩 ...
- STM32单片机开发环境搭建
学习过程中不能追求大而全,掌握大部分就可以. 注册ST账号 进入ST官网:意法半导体STM | STM32/STM8微控制器 | MCU单片机 点击注册: 进入注册界面: 登录: 账号:1848712 ...
- 《STM32库开发实战指南:基于STM32F103(第2版)》——2.1节仿真器简介
本节书摘来自华章社区<STM32库开发实战指南:基于STM32F103(第2版)>一书中的第2章,第2.1节仿真器简介,作者刘火良 杨森,更多章节内容可以访问云栖社区"华章社区& ...
- stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...
- Android 即时通讯开发小结(二)
<Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...
- ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)
参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...
- pdfjs viewer 开发小结
此文已由作者吴家联授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1. pdfjs库简介 PDF.js 是由Mozilla 主导推出的可以将PDF文件转换为H5页面进行展示的 ...
最新文章
- Python培训完可以找什么工作
- UVa1354 Mobile Computing
- 麦当劳java排班_学习肯德基排班管理系统
- ORIG1和ORIG2的运用
- 虚拟仪器的python实现_基于Python的虚拟仪器技术探究及实现.pdf
- 如此多的深度学习框架,为什么我选择PyTorch?
- Nginx、Apache工作原理以及nginx为何比Apache高效
- 浅谈Android选项卡(二)
- SpringMVC中实现文件上传
- rtmp代理php源码_RTMP直播系统(示例代码)
- 灵活的IP网络测试工具——— X-Launch
- win10计算机共享在哪,快速共享电脑文件,win10的“就近共享”功能了解一下!...
- 【GIT】搭建git项目
- java opennlp_java-使用openNLP maxent的训练模型
- Jxls使用模版导出excel表格公式无法自动计算失效解决
- 主力吸筹猛攻指标源码_主力吸筹猛攻指标源码-通达信公式 -程序化交易(CXH99.COM)...
- 【Ajax+】爬去今日头条图片
- bzoj 4417: [Shoi2013]超级跳马
- sklearn库:分类、回归、聚类、降维、模型优化、文本预处理实现用例(赶紧收藏)
- 亚马逊asin关键词排名追踪_善用亚马逊ABA数据,3步就能将关键词排名冲到首页...
热门文章
- 37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......
- 对SqlServer2008中的日志进行截断的方法
- 童继龙:论ERP顾问的创新分享与专业精神
- 用iptables实现G1手机cmwap代理上http网站[转]
- 实现一个通用的生产者消费者队列(c语言版本)
- Diango博客--21.实现简单的全文搜索
- 北海市计算机等级考试,2021上半年北海市计算机二级报名时间|网上报名入口【已开通】...
- php传中文给Java_完美解决PHP中文乱码(转) - - JavaEye技术网站
- windows环境下,如何在Pycharm下安装TensorFlow环境
- VS2010中 C++创建DLL图解