打印
[应用相关]

[转]库函数开发小结

[复制链接]
599|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
litengg|  楼主 | 2016-10-25 19:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可能有人要问, 之前自己在学51时,直接配置相关寄存器就行了,在stm32开发中,是不是就不需要配置寄存器,直接通过填充结构体就可以了呢?其实不然。我们可以在相关初始化函数上右击鼠标,选择Go to Definition, 便可以一目了然。例如GPIO_Init这个函数,
如图,

该函数会将之前填充的相关结构中参数写入GPIO中BRR, BSRR, CRH寄存器中:

而这几个寄存器正是配置stm32的pin口speed,mode。有时,如果我们不懂结构中相关参数在对应寄存器中的意思时,可以通过查询《stm32手册》来查找其参数意义。
因此在使用st库对外设进行初始化,一般的步骤如下:
  • 定义一个xxx_InitTypeDef类型的初始化结构体,
  • 根据使用需求,向这些结构体中写入特定的控制参数,
  • 填充好结构体,把这个结构体作为函数xxx_Init()的参数进行传递。写入对应的寄存器        中。
数据输入与输出:
在按键试验中,我们用了GPIO_ReadInputData()函数来读取按键输入pin口的电平。同样也可以用GPIO_ReadOutputData()函数来读取pin口的输出值, 说道着这里,想必大家知道这两个函数的重要性,有了这两个函数,就可以让MCU做一些逻辑任务了。同样,在在串口通信中,用了USART_SendData与UART_ReceiveData来通过串口收发数据。
标志位的检查与清除:
当外设完成了某些工作或出现某些状态的时候,会触发一些事件, 同时在相关寄存器中标志位就会被置位,例如,在USART通信中,当数据接收或者发送完成后,都会触发一个中断一个事件,并且进入同一中断服务程序中,这时候,检查标志位就很重要了,如果要确定是否为接收数据引发的中断,此时就可以用USART_GetITStatus来检查他的TXNE位是否被置位,具体如图所示:

接收位标志位的清除可以有两种方法第一是当你用软件读取USART_DR寄存器时,便可以完成RXNE的清除,同时也可以通过软件对它写0也可以清除。
沙发
qiangweii| | 2016-10-25 19:10 | 只看该作者
笔者已经能总结出用ST库开发的步骤和共同点了啊

使用特权

评论回复
板凳
shashaa| | 2016-10-25 19:13 | 只看该作者
GPIO_InitTypeDef形的结构体用来配置GPIO外设。。

使用特权

评论回复
地板
wanglaojii| | 2016-10-25 19:16 | 只看该作者
DMA_DIR  DMA_DIR规定了外设是作为数据传输的目的地还是来源用的。

使用特权

评论回复
5
laozhongyi| | 2016-10-25 19:34 | 只看该作者
NVIC_InitTypeDef形的结构体用来配置总中断管理器。

使用特权

评论回复
6
Edisons| | 2016-10-25 19:38 | 只看该作者
USART_InitTypeDef形式结构体用来配置串行口相关参数。

使用特权

评论回复
7
_gege| | 2016-10-25 19:42 | 只看该作者
之前自己在学51时,直接配置相关寄存器就行了啊?

使用特权

评论回复
8
Mozarts| | 2016-10-25 19:46 | 只看该作者
在stm32开发中,是不是就不需要配置寄存器,直接通过填充结构体就可以了呢?

使用特权

评论回复
9
litengg|  楼主 | 2016-10-25 19:57 | 只看该作者
Mozarts 发表于 2016-10-25 19:46
在stm32开发中,是不是就不需要配置寄存器,直接通过填充结构体就可以了呢? ...

不是吧,我们可以在相关初始化函数上右击鼠标,选择Go to Definition。

使用特权

评论回复
10
Listate| | 2016-10-25 20:01 | 只看该作者
库函数开发 还没接触过,今天先学习啦

使用特权

评论回复
11
heisexingqisi| | 2016-10-25 23:14 | 只看该作者
在按键试验中,我们用了GPIO_ReadInputData()函数来读取按键输入pin口的电平。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

1597

帖子

4

粉丝