STM32库内程序一些好的编程思路、方法及好的程序
下面这些是在STM32的库文件中摘抄的,可以在以后的编程中利用这些方法。
以下为把IO口转化为一个结构体指针的步骤:
首先是GPIO的定义,把其转化为了一个结构体,然后定义一个该结构体的对象,并把该端口的基地址赋给它即可操作该IO口了。然后给该结构体内的变量赋值即是向对应的IO口的对应寄存器内赋值。
一、GPIO的定义
按各寄存器的顺序定义变量(定义32位的是因为寄存器的大小是32位的)(按寄存器顺序排放是因为结构体内的变量是按定义的顺序来顺序排放的,因此正好与IO口内的寄存器的排放相对应):
二、确定IO口的地址
以上为各外设的起始地址,以下为各GPIO的首地址(GPIO是挂载在APB2上的)
(故下面的写法是APB2的基地址加上各端口的偏移地址)
各GPIO的首地址如下,故得出上面的写法
三、得到一个指向以该IO口地址的结构体的指针变量
以下把GPIO转化为了一个指针(方法是把相应的地址强制类型转化)(GPIOA为指针)
如何更好的配置寄存器
STM32给我们把每种的寄存器功能的配置转化为了一个个宏定义,让人一目了然。
GPIO工作模式设置(已定义好,直接用其名字即可)
为了达到见名知意的效果,各寄存器的每一种配置功能的二进制形式都转化为了一个符号常量。
为了方便配置每个io端口,把相应功能组合起来,构成一个结构体。完成此结构体的赋值,再调用相应的函数把这些值写入对应的寄存器,即可完成io端口的配置。
该结构体即是IO口的功能配置结构体,可实现IO口的某一个引脚的速度、工作模式的配置。
(配置的方法可使用上面定义好的宏常量)
好的程序写法
枚举可以使一些对象的取值只限定在一定的范围内,减少出错,而且更直观。
注意下面的写法,可以使数字更直观,而且清晰易懂,例如1左移31位即第31位为1。
具体例子例如这个使用左右移方式十分的方便且清晰:
(*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 控制寄存器
GPIOB_ODR:GPIO(general purpose input output) Boutput data register 输出数据寄存器
位的经典处理方法:
对寄存器的配置采用读、修改、写方式
STM32的库有许多好的思路,学习的时候可以把这些总结下来,多思考,多学习,这样才能慢慢提高。
STM32库内程序一些好的编程思路、方法及好的程序相关推荐
- 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!
程序员要精通一门语言,还是要掌握多门语言? 对于这个问题,公说公有理,婆说婆有理. 技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢? 不过呢,当你精通一门语言同时,涉猎一下其 ...
- linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家
Linux UDP socket编程(UDP通讯模型): UDPClient + UDPService. Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用! ...
- c语言入门小程序素数,C语言编程入门经典18个小程序
C语言是面向过程的,而C++是面向对象的 C跟C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考量的是怎样借助一个过程,对输入(或环境条件)进行运算处理得到输出(或推动 ...
- 微信小程序用户未授权bug解决方法,微信小程序获取用户信息失败解决方法
微信小程序开发交流qq群 173683895 承接微信小程序开发.扫码加微信. 正文: bug示例图: 导致这个bug的原因是 wx.getUserInfo(OBJECT) 接口做了调整: ...
- C语言程序的入口真的是main方法吗?
从刚开始学C语言的时候就给我们大脑里灌输了一个知识点: main函数是程序的入口,并且有且仅有一个. 当时我学习这个部分的时候对此深信不疑,main嘛,主嘛,那肯定就这个是入口了 根据后来的学习,慢慢 ...
- 加工中心刻字宏程序_【宏程序高级案例】涡轮发动机转动轴叶轮的编程思路与程序解析...
本文摘自<高手讲解数控宏程序编程思路> 本书以具体的零件加工为主线,全书共分九个章节循序渐进地讲解FANUC数控系统的宏程序编写过程与技巧. 第一章介绍了宏程序编程的基本要点. 第二章介绍 ...
- 一个单片机驱动LCD编程思路
文章目录 LCD种类概述 TFT lcd COG lcd OLED lcd 硬件场景 预备知识 面向对象 驱动与设备分离 LCD到底是什么 LCD驱动框架 代码分析 GUI和LCD层 驱动IC层 接口 ...
- 【青少年编程】【四级】绘图程序优化
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...
- FPGA之道(58)关于外界接口的编程思路
文章目录 前言 关于外界接口的编程思路 按传递方向分类 输入接口 输出接口 双向接口 原理简介 工作模式 主从模式 对等模式 简单示例 按电气特性分类 单端接口 差分接口 无线接口 按功能特性分类 时 ...
- helloworld讲解cocos2d-x的编程思路与要点
用helloworld讲解cocos2d-x的编程思路与要点 本文以cocos2d-x的helloworld为例,讲解cocos2d-x引擎的特点和要点,2.2为了展示新功能,把包括屏幕自适应在内的新 ...
最新文章
- JavaWeb:脚本标识
- MFC中CString转换成char数组的问题
- python实现队列_Python学习教程:用队列实现栈
- java中的位移运算符_Java 位移运算符
- python urlretrieve_使用urllib库的urlretrieve()方法下载网络文件到本地的方法
- 像msn那样的message提示
- [转] 测试员,敢问路在何方(来自微软工程师)
- (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试
- 初探Object Pascal的类(十一)
- 8.软件架构设计:大型网站技术架构与业务架构融合之道 --- 高并发问题
- mysql tomcat 自动重连_Tomcat JDBC数据库连接池断开重连
- 智能优化算法:蝴蝶优化算法-附代码
- lightoj 1029 最小生成树 + 最大生成树
- python自动化办公——python操作Excel、Word、PDF集合大全
- CAPL脚本如何实现TCP Socket通信
- android暗水印技术,基于Android的隐藏数字水印技术的研究与实现
- 网络设备常见接口和模块
- android 科大讯飞语音播报简单集成
- SAP中采购协议价格条件导致的物料成本核算取价问题实例
- Relative Ranks问题的两种实现