你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【nucleo板开发日志】ST标准外设库是如何把数据写入寄存器

[复制链接]
平淡~简单 发布时间:2014-9-26 12:11
nucleo开发板接到手好久了,就简单体验了一下mbed开发环境,的确很好玩。但是也没有仔细的研究,以前对STM32的标准外设库做了一点研究,这次贴上来,给新手做一些参考。就当是我的开发日志了,忙过这一段好好的,研究一下mbed的开发。(顺便提一下,忙着考研复习,所以可能得三个月不能玩STM32了)。废话不多说,上干货。
主要讲解一下,他的标准外设库是如何进行操作,把我们设置的一些参数,写入对应的寄存器地址当中。
这里以void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)函数为例:这个函数的第一个参数是STM32的端口值,第二个参数是端口的引脚。也就是把对应的端口引脚的位置1
第一个参数是一个结构体类型,用keil的定位查找功能可以找到宏定义#define GPIOF   ((GPIO_TypeDef *)  GPIOF_BASE),这句代码把GPIOF_BASE强制转换成了一个结构体,而这个结构体GPIO_TypeDef里面的参数,就是端口的寄存器。如下图所示 1.png
通过查找技术参考手册,这些变量的命名和寄存器的名字是一样的,方便使用。其中不可操作的位,被定义成保留的位。
在STM32F30x.h里面可以找到下面的一些宏定义,
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)
在这里它强制把GPIOx_BASE转换成了GPIO_TypeDef结构体的形式。 然后查找GPIOx_BASE可以看到。
/*!< AHB2 peripherals */
#define GPIOA_BASE            (AHB2PERIPH_BASE + 0x0000)
#define GPIOB_BASE            (AHB2PERIPH_BASE + 0x0400)
#define GPIOC_BASE            (AHB2PERIPH_BASE + 0x0800)
#define GPIOD_BASE            (AHB2PERIPH_BASE + 0x0C00)
#define GPIOE_BASE            (AHB2PERIPH_BASE + 0x1000)
#define GPIOF_BASE            (AHB2PERIPH_BASE + 0x1400)
根据不同的型号的,他们的定义稍有不同,不过都类似,这里GPIO是挂在AHB2总线上的。
继续查找AHB2PERIPH_BASE可知
 #define AHB2PERIPH_BASE       (PERIPH_BASE + 0x08000000)
#define PERIPH_BASE           ((uint32_t)0x40000000)
通过计算可以得到
GPIOA_BASE=0x40000000 + 0x08000000 + 0x0000=0x48000000
通过查找数据手册,如下图所示
2.png
可以知道就是GPIOA的寄存器基地址,其它也都和这个一样。在最上面把这个基地址强制转换成了GPIO的结构体类型的地址,这样就可以通过操作结构体里面的成员,把数据写入对应的寄存器。
再说一个小的知识点,对堆栈的设置,在启动函数里面如下图所示:
3.png
在这地方限制了堆stack的大小为0x400,栈的大小Heap的为0x200,如果你要在子函数中开辟较大的空间或者需要较大的数组时,相应的需要扩大这两个值。
好了,就写这么多吧,希望对于新手能够有帮助。
以后有机会要多参加ST社区的活动。再次支持一下ST社区,刚才看到M7出来了,很期待,希望ST有更好的芯片出来。
 
收藏 评论1 发布时间:2014-9-26 12:11

举报

1个回答
沐紫 回答时间:2014-9-26 13:10:08

RE:【nucleo板开发日志】ST标准外设库是如何把数据写入寄存器

灰常谢谢楼主的支持~

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版