上一篇文章讲了tick定时器位于内核中的什么位置。 本文讲的是tick定时器结构体和地址之间的联系。 不知道大家在搜索tick定时器地址的时候有没有注意到。 这是定义
# (( *) ) 这个东西第一次还是有点迷惑(初学者强烈推荐一本入门书《C 与指针》(*^__^*))。 这句话是什么意思呢? 通俗地说,它被定义为一个指向结构体的指针,而这个指针的地址是一个固定值,也就是上一篇文章中写的。 这个结构是什么? 您还可以在内核文件中找到它{ __IO CTRL; __IO 负载; __IO 值; 校准; };
该结构体的这四个成员是不是很眼熟? 如果你读过数据表,或者在STM32项目中初始化过tick定时器,你就会知道它们是什么。
首先阅读内核数据手册,找到tick定时器的几个寄存器,如下
再看tick定时器的初始化函数,->LOAD=(ticks & Msk) - 1; -> 值 = 0; ->CTRL=| _问号 | 询问;
你发现它们一一对应了吗? 结构体中的成员为32位,32位数据为4个8位,1个地址存储8位。 如果结构体成员是同一类型的数据,则结构体成员的地址是连续的。 这就合理地解释了这四个寄存器地址与库函数中结构体的对应关系。 虽然这里以tick定时器为例,但是学习stm32的过程总是这样的,从而将硬件寄存器与库函数中的结构体关联起来。 这个方法可以帮助大家了解一点关于通过寄存器进行写入的知识。 加深对图书馆功能的理解。