STM32学习记录1 12.30

        /*本人为纯纯初学者,水平非常低,写文章只是为了记录学习经历,并且输出文字加强理解与记忆。本文十分不严谨,只具参考作用,可能具有误导性,请谨慎阅读。如果各位dalao发现错误,欢迎友善的指正、建议与讨论。初入CSDN,对平台的规范不是很熟悉,还请多多包容,感谢!*/

在迷迷糊糊地听了半个月寄存器映射总线内存地址之后(虽然没太听懂) 今天终于上手点灯了。在此之前想先把之前的理论梳理一下。

        STM32乃至所有的单片机,都是通过一系列的操作达成用程序控制寄存器以一定的方式输出高低电平来工作的。寄存器就是存储器的别名,通过将Flash中的程序读入内核(ARM公司设计),内核通过总线将程序执行于外部寄存器(ST公司设计)然后外部寄存器中的外设部分执行程序,通过电路的原理执行功能,这一切都需要我们编写程序来完成。当然外设的执行需要时钟、配置输入输出等一系列设定协助,保证程序高速正确的执行也需要内核的精密运作。

        当生产厂家将主要硬件搭好,或者我们将自己将另加的外设安装好之后,我们的任务就是编辑程序了。STM32以及大部分计算机都是用C语言编程,程序除了直接让所需功能执行外,各种协助性功能,或者参数的设置(如输入输出口的调整)也都是通过写程序来配置。最底层的方式就是直接利用C语言访问内存的功能来访问寄存器,在手册中查找好基地址与偏移地址,然后直接用指针访问相关地址,用位运算进行修改。这就是基于寄存器编程。

        寄存器编程优点在于很灵活,运行速度快,冗余少。对于51这种寄存器很少的单片机可以游刃有余地控制。但是对于功能强大,寄存器数量巨多无比的STM32,每次编程实现一个小小的功能都要写动辄十几行的代码进行各种配置,并且地址都是十六进制数字,查找编写以及纠错都非常繁琐,因此我们一般都利用计算机语言可套娃的特性,使用固件库编程。

                固件库目前还没有学,但大致应该就是将地址等取个人名(人能看懂的名字),并且通过宏定义define、自定义类typedef、结构体struct等等将实现一个功能的十几行代码进行封装进一个关键字,需要用的时候直接输入这个关键字即可。这样就大大减少了人的工作量。

目前STM32的固件库主要有标准库,HAL库,LL库。HAL库的集成程度比标准库更高,有超强的可移植性,并且可以配合图形化编程软件Cube MX进行配置,因此HAL库更常用。但相应的,HAL库的效率就会稍低。

        一不小心写成说明文了...马马虎虎过完这些内容之后,开始点第一个灯(如果不算Arduino的话)

        点灯需要三个步骤:启动时钟,配置相关引脚为输出,调整相关引脚寄存器为低电平。而这些都要看原理图和手册来完成。

然后一系列查地址 定义 位运算

两个骗子是为骗过编译器不报错。

其他的暂时略过,现在遇到的问题是,不知 PB1 PB5 是指哪个位置...控制第五位和第一位都仍然亮绿灯(将1<<0改成了1<<1,或者改变逻辑符号都无效)。可能是位运算错了?有机会再试一试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值