在基本入门熟悉了开发环境后,我开始学习stm32中的gpio口用法,学习的方法还是最直观简便的先控制LED灯。然而stm32中点亮led倒没有51单片机那么简便。有过51单片机学习经验的伙伴们,肯定熟悉下图的代码(51中控制led的程序)。
如果同样方法写在stm32中肯定是不行的了,首先因为stm32中没有51头文件中那样定义好了P0口可以直接进行总线操作,其次stm32中的gpio口默认是输入模式并且还需要打开相关引脚口的时钟。可能很多人会觉得stm32中官方给的固件库可以直接操作寄存器从而控制gpio口,但是我觉得我这样的初学者还是多了解下底层的方法便于更好的理解。要实现stm32点亮一个led灯(即让gpio口输出一个高电平)一共分三步:
第一步:通过时钟控制寄存器rcc打开相应gpio口的时钟如下例中的PB0。
第二步:通过CRL寄存器设置gpio口为推挽输出模式。
第三步:通过ODR寄存器将相应gpio口输出电平。
所谓单片机中的寄存器,其实就是一些有特殊功能的内存单元,是生产官方配置的。而我们正是通过寄存器来实现单片机的各种控制。下面来讲解下我所用的三种方法,首先是最原始的直接操作内存单元。相应的寄存器内存地址是通过官方手册查找的,代码如下:
很明显,虽然第一种方法是非常简短且不需要额外库函数的代码,但是程序的可读性和可移植性都非常差。于是我便采用了第二种使用寄存器映射的方法,所谓寄存器映射也可以理解成就是定义寄存器别名的过程。
第三种也是最后一种便是使用官方所给的固件库了,其实原理大致也就是用宏定义和结构体定义些基地址,然后把寄存器的位操作过程等都写在库函数中封装起来,我们只要操作相应库函数就可以了。为了增加可读性,我把库函数再宏定义了一遍。
上图代码中那个延时函数是为因为还有没有学习中断才这样写,师兄也指出来和我说那是很不好的习惯,因为在等待延时过程中别的任务都无法运行并且时钟的延时精度不高。由于之前我的C语言功底并不很扎实,所以在结构体,枚举,宏定义以及一些强制类型转换的指针操作,我都添加了许多注释来增加印象。以上图文便是我本篇博客的全部内容了,继续保持学习分享更多的博客。
上一篇:STM32学习系列---STM32之GPIO
下一篇:stm32F051系列教程 1.点灯
推荐阅读
史海拾趣
随着全球对环境保护意识的增强,Heimann Optoelectronics Gmbh积极响应,将绿色环保理念融入产品设计和生产中。公司投入大量资源研发出低功耗、长寿命的光电传感器,这些产品在使用过程中能够显著减少能源消耗和废弃物产生。此外,公司还采用环保材料进行包装,确保从生产到废弃的整个生命周期都符合环保标准。这一举措不仅赢得了市场的广泛赞誉,还为公司树立了良好的企业形象。
在市场不断拓展的同时,ETA Electric Industry Co Ltd非常注重产品质量管理。他们引入了国际先进的质量管理体系,并严格执行每一项质量控制标准。公司还设立了专门的质量检测部门,对每一批出厂的产品进行严格把关。这种对质量的极致追求,赢得了客户的广泛认可和信赖。
品质一直是Anachip公司非常重视的一环。为了确保产品的稳定性和可靠性,公司建立了严格的品质管理体系,从原材料采购到生产过程的每一个环节都进行严格控制。同时,公司还加大了品牌建设的力度,通过广告宣传、赞助活动等方式提升品牌知名度。这些举措不仅提升了公司的市场竞争力,也赢得了客户的信任和忠诚。
随着科技的不断进步和市场需求的不断变化,兆欣始终保持对新技术和新应用的敏锐洞察力。他们不断推出创新产品和技术解决方案,引领着行业的发展方向。同时,兆欣还积极与高校和科研机构合作,共同推动电子行业的创新和发展。这种持续的创新精神是兆欣在电子行业中保持领先地位的关键所在。
请注意,以上故事是基于兆欣公司的发展历程和事实进行创作的,但具体细节和数据可能因时间和市场变化而有所不同。
浙江东亚电子自成立以来,一直致力于技术创新和研发。公司拥有一支由50余名技术研发人员组成的专业团队,不断开发新产品和解决方案,以满足市场需求。这些创新产品不仅在国内外市场上获得了广泛认可,还为公司在新能源、通讯和军工等领域树立了良好的品牌形象。
Cadeka公司始终将品质和创新作为企业发展的核心。公司建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。同时,公司还不断投入研发资金,推动技术创新和产品升级。通过品质和创新并重的发展战略,Cadeka公司赢得了客户的信赖和市场的认可。
我买的其他开发板的例子程序中 在这个子程序部分: 1.uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法 2.{ 3. uchar cord_h,cord_l;//行列值中间变量 4. P3=0x0f; // ...… 查看全部问答∨ |
|
客户服务软件工程师, Software Customer Service Engineer Job Description: Responsibilities: Work within a global R&D team located in Europe and China with work language of English to provide the services as follo ...… 查看全部问答∨ |
|
移植的u-boot-1.1.6,用tftp命令直接下载内核和文件系统,然后启动都很正常,上图是我自己做的menu菜单,然后下载内核和文件系统都出现了如下提示,下载完后内核启动到一半就死了。 NAND erase: mtdparts variable not set, see \'help mtdparts ...… 查看全部问答∨ |
|
多核处理器芯片,如何让一个处理器固定的执行某一段程序,另一个处理器执行其余程序 对于多核处理器芯片,比如arm cortex a9 双核的,如何让一个处理器固定的执行某一段程序,而另一个处理器执行其余的程序 \0\0\0eeworldpostqq… 查看全部问答∨ |