RoboMaster

标题: 【转载】【连载】奋斗stm32开发板学习日记6——库函数开... [打印本页]

作者: 哈哈哈    时间: 2015-3-11 21:06
标题: 【转载】【连载】奋斗stm32开发板学习日记6——库函数开...

回顾之前的教程, 主要写了GPIO点灯, EXTI按键中断, USART串口通信,通过这几个实验,笔者已经能总结出用ST库开发的步骤和共同点了。那么接下来就来谈谈他们的共同点。

初始化:

翻看前面笔者写过的例程,不难发现我们在使用这些外设之前,总要先定义一个结构体,然后给该结构体中的相关参数赋值。先看看之前都用了哪些结构体:

可能有人要问, 之前自己在学51时,直接配置相关寄存器就行了,在stm32开发中,是不是就不需要配置寄存器,直接通过填充结构体就可以了呢?其实不然。我们可以在相关初始化函数上右击鼠标,选择Go to Definition, 便可以一目了然。例如GPIO_Init这个函数,

如图,


                               
登录/注册后可看帖子

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


                               
登录/注册后可看帖子

而这几个寄存器正是配置stm32的pin口speed,mode。有时,如果我们不懂结构中相关参数在对应寄存器中的意思时,可以通过查询《stm32手册》来查找其参数意义。

因此在使用st库对外设进行初始化,一般的步骤如下:

数据输入与输出:

在按键试验中,我们用了GPIO_ReadInputData()函数来读取按键输入pin口的电平。同样也可以用GPIO_ReadOutputData()函数来读取pin口的输出值, 说道着这里,想必大家知道这两个函数的重要性,有了这两个函数,就可以让MCU做一些逻辑任务了。同样,在在串口通信中,用了USART_SendData与UART_ReceiveData来通过串口收发数据。

标志位的检查与清除:

当外设完成了某些工作或出现某些状态的时候,会触发一些事件, 同时在相关寄存器中标志位就会被置位,例如,在USART通信中,当数据接收或者发送完成后,都会触发一个中断一个事件,并且进入同一中断服务程序中,这时候,检查标志位就很重要了,如果要确定是否为接收数据引发的中断,此时就可以用USART_GetITStatus来检查他的TXNE位是否被置位,具体如图所示:


                               
登录/注册后可看帖子

接收位标志位的清除可以有两种方法第一是当你用软件读取USART_DR寄存器时,便可以完成RXNE的清除,同时也可以通过软件对它写0也可以清除。



作者: 自由之翼    时间: 2015-3-11 21:24
不错不错,顶一个!
作者: u0uuuu    时间: 2016-11-15 21:03
楼主好人。。。。。




欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2