stm32库函数开发小结

铺垫:

外设基本都具有以下几类寄存器:
控制寄存器xxx_CR,用于配置、控制相应外设,如USART_CR1~USART_CR3等。
数据寄存器xxx_DR,存储外设输入输出的数据,如GPIOx_IDR、GPIOx_ODR等。
状态寄存器xxx_SR,存储当前外设状态,主要为一些标志位,如USART_SR、ADC_SR等。
功能划分十分清晰,这样我们也基本能明白常见的初始化操作乃至其他操作寄存器在做什么。

初始化

先前的学习中,我们使用函数库来初始化,大量使用XXX_InitTypeDef类型的XXX_InitStructure来配置对应的外设,如NVIC、EXTI等。
这些初化结构体中的参数往往是与相应外设的控制寄存器CR对应的,使用库函数开发的时候,参阅参考手册可以了解参数的意义。
如下图为USART_CR1的寄存器说明:(部分)

使用ST库进行外设的初始化一般有如下步骤:
在这里插入图片描述

  1. 定义一个xxx_InitTypeDef类型的初始化结构体
  2. 根据使用要求,向结构体成员写入相应的控制参数。
  3. 填充好结构体后,将其作为输入参数调用相应的外设库函数xxx_Init(),从而实现向寄存器写入控制参数。

所有的库函数初始化结构体和初始化函数都有类似的应用方式,我们熟练地掌握这应用方式,每次使用时仅需了解结构体成员控制参数的意义就能轻松控制外设。

数据的输入输出

对于有数据输入输出的外设,官方库一般有相应的库应运而生,如GPIO_ReadOutputDataBit()GPIO_ReadInputData()等。
这些函数则是控制应的数据寄存器DR的内容达成数据的输入输出的目的,使用方法依然共性可循:

  1. 输入参数,向函数指定使用的是什么外设,如使用GPIOA,GPIO_Pin_5,选定PA5进行控制。用USART1来指定外设。
  2. 若向外输出数据则调用相应的Output或send函数,将要输出的数据作为输入参数。

若为接收数据,则是调用read或Receive函数,读取函数的返回值来得到外部输入数据。

对于其他外设也有类似的控制数据输入输出的库函数。如用ADC_GetConversionValue()函数获取ADC转换的值。

状态位&标志位

让我们方便地了解外设当前的状态,而无需其他特别手段检验外设状态。最常用的就是串口收发时的收发完成标志位、总线空闲标志位等。
当然也会有相应的查询和清除函数,一般命名为xxx_ClearFlag()xxx_ClearITPendingBit(),如串口的USART_ClearFlag()

事件

上文提到的总线空闲标志位正是一种事件标志位,当外设完成一些工作或出于某些状态时候会触发一些事件,这些事件就会在状态寄存器SR中以不同位存储记录,也就是相应的事件标志位。
如串口完成发送后,会在UASRT_SR中位6置1,作为发送完成标志。我们一直检查它就可以得知是否发送完成。但这样会耗费宝贵的内核资源,ST以中断解决这个问题,那不是我们这里应当讨论的内容了;)

外设函数分类

库函数还有许多共同点,如外设都有xxx_Cmd()函数,能用来使能外设等。
在此对外设主要共有的函数进行简单分类(不代表一定有):

函数名功能输入参数返回值实例
xxx_Init()初始化外设xxx_InitTypeDef类型结构体voidGPIO_Init()
xxx_DeInit()按照缺省值初始化外设外设名voidUSART_DeInit()
xxx_StructInit()按照默认数据填充结构体xxx_InitTypeDef结构体voidGPIO_StructInit()
xxx_SendData()让外设发送数据外设名,要发送的数据voidUSART_SendData()
xxx_ReceiveData()让外设接收数据外设名接收到的数据USART_ReceiveData()
xxx_GetFlagStatus()查询状态位事件标志名SET/RESETUSART_GetFlagStatus()
xxx_GetITStatus()查询中断标志位中断标志名SET/RESETUSART_GetITStatuss()
xxx_ClearFlag()清除状态位事件标志名voidUSART_ClearFlag()
xxx_ClearITPendingBit()清除挂起的中断标志位中断标志名voidUSART_ClearITPendingBit()
xxx_ITConfig()配置中断外设名,中断标志名,
ENABLE./DISABLE
voidUSART——ITConfig()
xxx_Cmd()使能/失能ENABLE./DISABLEvoidTIM_Cmd()
xxx_DMACmd()配置外设是否可用DMA请求外设名,要配置的DMA请求(如DMA接收请求),ENABLE./DISABLEvoidUSART_DMACmd()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

McDuck_Spirit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值