前言
看了挺多的招聘信息的,如果是嵌入式相关的都要求很高。
而且很多招聘要求都要会用STM32
所以,现在开始正式接触一下吧。
有之前学习的基础,应该不难。
跑马灯实验
学习的思路
1.看代码
从main函数里面得到的信息
头文件没有截图过来。
第一步是进行各种初始化,
时钟初始化、延时函数初始化、LED初始化
第一步的时钟初始化,跟之前学ARM裸机的时候一样,开头的Start.S文件也是要进行初始化时钟,而且别人还要设置栈才能用C语言,这里目前还没有看到。
时钟初始化的函数进去研究的话要看STM32的参考手册,结合时钟树图可以分析,但是可能有点复杂,晚点自己再看。
分析两者的异同,从简单的LED_init来分析比较好。
这是LED初始化的函数。
STM32用了大量的宏定义,这样可能是为了让人更加好阅读代码吧。
其实RCC\GPIOB\GPIOE\APB2ENR这些都是可以进去再查看的
使能时钟
1.进入RCC的definition
#define RCC ((RCC_TypeDef *) RCC_BASE)
依旧是一串定义,再分别进去
再一步步进入
慢慢地就追踪到了地址上面,从APB2外部总线一直追到外部总线,最后到地址,这不就是操作寄存器的节奏吗?
配置IO口
都是有根可寻一一对应的。
ARM裸机的代码
它这里时钟的初始化在start.S里面做了。
有些其他外设要使用其他时钟频率也是通过操作寄存器进行配置。
总结
对比两者来看,其实是非常相似的,都是操作寄存器。
仔细的看,这些寄存器都是基地址+变址进行操作的,而且是层层递进的。
如果把STM32的那段代码全部展开来,那结果就像ARM裸机一样的操作了,所以真的非常相似,有了之前的基础,是很容易继续学习下去的。