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

STM32库内程序的一些编程思路

[复制链接]
hello_bug 发布时间:2017-12-26 22:35
以下转载自CSDN网站,作者保留一切权利。
( B$ F2 }2 v. Y# @: P- M: F% y
下面这些是在STM32的库文件中摘抄的,可以在以后的编程中利用这些方法。
以下为把IO口转化为一个结构体指针的步骤:
       首先是GPIO的定义,把其转化为了一个结构体,然后定义一个该结构体的对象,并把该端口的基地址赋给它即可操作该IO口了。然后给该结构体内的变量赋值即是向对应的IO口的对应寄存器内赋值。
一、GPIO的定义
按各寄存器的顺序定义变量(定义32位的是因为寄存器的大小是32位的)(按寄存器顺序排放是因为结构体内的变量是按定义的顺序来顺序排放的,因此正好与IO口内的寄存器的排放相对应):
二、确定IO口的地址
以上为各外设的起始地址,以下为各GPIO的首地址(GPIO是挂载在APB2上的)
(故下面的写法是APB2的基地址加上各端口的偏移地址)
         
各GPIO的首地址如下,故得出上面的写法
三、得到一个指向以该IO口地址的结构体的指针变量
以下把GPIO转化为了一个指针(方法是把相应的地址强制类型转化)(GPIOA为指针)
) u; l& b( T: @) C1 m) L7 {# t
如何更好的配置寄存器
STM32给我们把每种的寄存器功能的配置转化为了一个个宏定义,让人一目了然。
GPIO工作模式设置(已定义好,直接用其名字即可)
为了达到见名知意的效果,各寄存器的每一种配置功能的二进制形式都转化为了一个符号常量。
为了方便配置每个io端口,把相应功能组合起来,构成一个结构体。完成此结构体的赋值,再调用相应的函数把这些值写入对应的寄存器,即可完成io端口的配置。   
该结构体即是IO口的功能配置结构体,可实现IO口的某一个引脚的速度、工作模式的配置。
(配置的方法可使用上面定义好的宏常量)

; D6 r! g; `6 [% m好的程序写法
枚举可以使一些对象的取值只限定在一定的范围内,减少出错,而且更直观。
注意下面的写法,可以使数字更直观,而且清晰易懂,例如1左移31位即第31位为1。

8 o9 F4 N% r/ S6 T# U% J
具体例子例如这个使用左右移方式十分的方便且清晰:
(*volatile unsigned long)0x40010C00 =(2<<20) | (0<<22);  // 为简单起见,不管其他位了
*(volatile unsigned long *)0x40010C0C =1<<5;
(还可利用上面的方式,把5,20利用宏定义转化为更清晰的字符)
一些简写的写法
RCC_APB2ENR:RCC 是时钟寄存器 , APB2 是外设2 ,ENR可以理解为 enable
GPIOB_CRL:GPIO Bcontrol 控制寄存器
0 p+ D( ?3 a" O2 M: J( @GPIOB_ODR:GPIO(general purpose input output) Boutput data register 输出数据寄存器
位的经典处理方法:
对寄存器的配置采用读、修改、写方式
7 V% R  P2 ~3 K& G3 ]( z  j

5 g' o7 G$ e! `; H
. M& p( D" C3 \0 l6 D0 Z6 D. k
STM32的库有许多好的思路,学习的时候可以把这些总结下来,多思考,多学习,这样才能慢慢提高。

) i9 X- t. Q& |& E/ N# A" I/ `
收藏 评论0 发布时间:2017-12-26 22:35

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版