|
知其然,知其所以然;STM32cube图形配置生成代码的方式固然方便,但是对我来说,了解这些函数的诞生过程是心中挥之不去的念想,于是我暂时停下了录播课程,想要从最基础的知识来重新认知STM32。
我重新拿起了模电,复习场效应晶体管的知识,以便读懂GPIO框图,知晓推挽输出与开漏输出的概念;从资料上看到了芯片内部划分的4GB地址空间以及位于block0的Flash、block1的Sram、Block2的片上外设。寄存器,这个听了许久的名词,第一次清晰地认知到它的定义:已分配好地址、具有特殊功能的存储空间。从GPIOB的地址0x40010c0c出发,体会到定义指针变量指向寄存器地址,通过指针操作改变寄存器值。再到定义32位无符号型结构体变量,将结构体数组的首位成员与片上外设基地址对应,从而以结构体数组的形式存储N个寄存器,通过_>符号访问成员的方式修改其中某个寄存器的值,将此过程作为自定义函数的内部操作,完成时钟初始化,一个库函数雏形由此诞生。看完这些知识的过程略显痛苦,有许多艰涩难懂的知识,但却让我有数次豁然开朗的感觉,心中不禁为标准库函数中代码的严谨感到震撼。
翻阅参考手册的过程解决了不少疑惑,也留下了许多无法理解的问题,我想,查阅资料将无法理解变为可以理解的过程,这便是进步的见证。如果时间允许,我还会如本周一样,用寄存器或者标准库开发的方式去试验自己曾经学过的知识,这个过程或许会很漫长,但我有充足的信心坚持下去。我始终认为,了解寄存器开发会提升对单片机的认知程度,熟悉了最根本的原理,未来出现新颖的工具也会更加得心应手。
课程已然过半,希望未来的一个月每一天都不曾辜负初衷。
|
|