天天看点

STM32开发内核结构

转载请保留原作者

想讲解一下STM32的开发内核架构,说白了就是讲讲我的代码是怎么一层一层的调用一直到最底层的寄存器的.

首先上图:

STM32开发内核结构

图中已经很清晰了,我只想强调几个点: 1. stm32f10x.h这个文件真是相当的吊啊,基本上所有的哭文件里都有包含这个文件,因为这个文件时间上就相当于STM32的硬件抽象,他隔绝了底层的寄存器,向上提供了各种结构体,同时这个文件定义了很多的常量,都是在使用的时候赋值给某个寄存器的 2. 再往上来一个层级,system_stm32f10x.c和.h他们的作用是初始化系统(时钟),这个是启动的汇编文件里调用的,用于初始化系统 3. 而对于core_cm3.c和.h文件,他们是干什么的呢,看名字就知道这是个和内核比较接近的文件,所以它的功能就是初始化内核,我们都知道内核才是ARM公司的,其他的外设都是芯片厂商的,但是到底初始化了内核的什么,暂时还不清楚, 下次再补充 4. 再往上就是标准的外设驱动,misc是关于NVIC中断分组的,这个驱动被单独列出来因为原来的版本里面没有这个文件。 5. 再就是stm32f10x_it.c这个文件是系统中断函数 6. last BUT not least      stm32f10x_conf .h这个文件里面的细节要注意,这个文件里面有一个宏,他可以开启所有的库函数里面的一个隐藏技能,就是再编译阶段检查函数的参数是否符合要求,相当吊的一个功能,他怎么实现的呢:利用断言和这个  assert_param(isXXX_ALL_PERIPH(  ))宏

好了总结一下,函数怎么操作底层寄存器的呢?首先明确一点,外设啥的都是要映射到存储器中的,所以用那个硬件抽象层的文件把寄存器用结构体来封装一下,然后将这个结构体的地址设置为存储器中该外设所映射的那个地址,这样操作结构体的时候就是操作寄存器,然后在将这些结构体的操作封装为库函数(即驱动函数)

就这么多了,一下午没有上自习了,都有负罪感了。下次更新  To be continue..........

转载请保留原作者

想讲解一下STM32的开发内核架构,说白了就是讲讲我的代码是怎么一层一层的调用一直到最底层的寄存器的.

首先上图:

STM32开发内核结构

图中已经很清晰了,我只想强调几个点: 1. stm32f10x.h这个文件真是相当的吊啊,基本上所有的哭文件里都有包含这个文件,因为这个文件时间上就相当于STM32的硬件抽象,他隔绝了底层的寄存器,向上提供了各种结构体,同时这个文件定义了很多的常量,都是在使用的时候赋值给某个寄存器的 2. 再往上来一个层级,system_stm32f10x.c和.h他们的作用是初始化系统(时钟),这个是启动的汇编文件里调用的,用于初始化系统 3. 而对于core_cm3.c和.h文件,他们是干什么的呢,看名字就知道这是个和内核比较接近的文件,所以它的功能就是初始化内核,我们都知道内核才是ARM公司的,其他的外设都是芯片厂商的,但是到底初始化了内核的什么,暂时还不清楚, 下次再补充 4. 再往上就是标准的外设驱动,misc是关于NVIC中断分组的,这个驱动被单独列出来因为原来的版本里面没有这个文件。 5. 再就是stm32f10x_it.c这个文件是系统中断函数 6. last BUT not least      stm32f10x_conf .h这个文件里面的细节要注意,这个文件里面有一个宏,他可以开启所有的库函数里面的一个隐藏技能,就是再编译阶段检查函数的参数是否符合要求,相当吊的一个功能,他怎么实现的呢:利用断言和这个  assert_param(isXXX_ALL_PERIPH(  ))宏

好了总结一下,函数怎么操作底层寄存器的呢?首先明确一点,外设啥的都是要映射到存储器中的,所以用那个硬件抽象层的文件把寄存器用结构体来封装一下,然后将这个结构体的地址设置为存储器中该外设所映射的那个地址,这样操作结构体的时候就是操作寄存器,然后在将这些结构体的操作封装为库函数(即驱动函数)

就这么多了,一下午没有上自习了,都有负罪感了。下次更新  To be continue..........