1、寄存器 1.1 SCR寄存器: SystemInit()函数操作SCB->VTOR重定位中断向量表,在STM32MP157参考手册中未找到相关寄存器。通过百度得知,这个寄存器定义需要参考《ARM+Cortex-M3与Cortex-M4权威指南》。通过查找该手册在“”4.6章节系统控制块”找到该寄存器描述信息。7.9.3章节 向量表偏移寄存器(VTOR)在不同版本的Cortex-M3和Cortex-M4有些区别但寄存器地址都为0xE000ED0C。
2、启动文件 startup_stm32mp15xx.s 启动文件是系统上电后第一个运行的程序文件,主要由汇编语言编写
3、堆、栈 堆:用于存放进程运行中被动态分布的内存段,一般由程序员释放。 栈:一般是存放函数的参数值和局部变量的值。由编译器自动分配释放。 若工程中使用的局部变量较多,定义的数据长度较大时,如果不调整栈的空间大小,就会导致程序栈溢出,程序运行异常。
4、链接脚本 程序编译步骤:预处理、汇编、编译、链接
5、模块功能开发 5.1 GPIO 5.1.1 介绍 每个GPIO都有4个32 bit配置寄存器(GPIOx_MODER,GPIOx_OTYPER, GPIOx_OSPEEDR and GPIOx_PUPDR),2个32 bit数据寄存器(GPIOx_IDR and GPIOx_ODR)和1个32 bit置位\复位寄存器(GPIOx_BSRR)。另外所有的GPIO都有一个32 bit锁定寄存器(GPIOx_LCKR)和2个32 bit复用功能寄存器(GPIOx_AFRH and GPIOx_AFRL)。
5.1.2 GPIO主要feature 输出状态:push-pull or open drain + pull-up/down(上拉或下拉的推挽或开漏) 输入状态:浮空,上拉,下拉,模拟 5.1.3 GPIO功能描述 输入浮空 输入上拉 输入下拉 模拟输入 上拉或下拉开漏输出 上拉或下拉推挽输出 上拉或下拉推挽复用功能 上拉或下拉开漏复用功能 注解:开漏输出: "漏"指的是 MOS 管的漏极,其输出端相当于三极管的集电极,默认情况下,开漏只能输出低电平,要得到有驱动能力的高电平状态需要加上拉电阻才行。 推挽输出:推挽输出的结构是由两个三极管或者 MOS 管受到互补信号的控制,两个管子始终保持一个处于截止,另一个处于导通的状态,此时电路可以真正的输出高电平或者低电平,且两种电平下都有驱动能力(即有输出电流的能力)。 STM32 的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还是得外部上拉。 5.1.4 操作寄存器实现点灯功能 测试环境,通过CubeIDE配置基本的代码环境 代码实现如下
01 使能需要使用的GPIO的时钟
void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOZ_CLK_ENABLE();
}
02 手动配置相关寄存器
void led_init(void)
{
GPIOZ->MODER = (GPIO_MODER_MODER5_0 | GPIO_MODER_MODER6_0 | GPIO_MODER_MODER7_0);
GPIOZ->OTYPER = 0x00;
GPIOZ->OSPEEDR = (GPIO_OSPEEDR_OSPEEDR5_1 | GPIO_OSPEEDR_OSPEEDR6_1 | GPIO_OSPEEDR_OSPEEDR7_1);
GPIOZ->PUPDR = (GPIO_PUPDR_PUPDR5_1 | GPIO_PUPDR_PUPDR6_1 | GPIO_PUPDR_PUPDR7_1);
}
03 配置输出寄存器实现开关功能
void led_on(void)
{
GPIOZ->ODR = (GPIO_ODR_ODR5 | GPIO_ODR_ODR6 | GPIO_ODR_ODR7);
}
void led_off(void)
{
GPIOZ->ODR = 0x00;
}
main函数中调用led_on()和led_off() /----------------------------------------------------------- 2021/09/25 ---------------------------------------------------------------------------/
|