20250623工作学习笔记STM32

一:启动文件工作:
1.初始化堆栈指针 SP=_initial_sp
2.初始化 PC 指针=Reset_Handler
3.初始化中断向量表(weak定义中断服务函数)
4.配置系统时钟
5.调用 C 库函数_main 初始化用户堆栈,从而最终调用 main 函数去到 C 的世界
二:时钟部分:PCLK2 = HCLK = SYSCLK=PLLCLK = 72M,PCLK1=HCLK/2 = 36M。使用HSE(外部高速时钟)8M,PLL通过倍频9倍为72M=系统时钟SYSCLK
三:外部中断:
1.配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。NVIC_PriorityGroupConfig 是整个程序中只
需要设置一次。
2.在使用外部中断时,需要先配置SCB->AIRCR的bit10~8中断分组(111对应组0,即0位抢占优先级,4位响应优先级(0-15),110对应组1,即1位抢占优先级(0-1),4位响应优先级(0-7)),再使能中断,再编写中断服务函数(注意名称要与启动文件里的中断服务函数名称一致,否则会导致直接跳转到启动文件里面预先写好的空函数,并且在里面无限
循环,实现不了中断。)
第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
3.EXTI 有 20 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至 EXTI15,但是除了前五个有单独的中断源(0-4),后面的5-9共用中断源EXTI9_5_IRQHandler,10-15共用中断源EXTI15_10_IRQHandler,当设置的中断发生时挂起寄存器(EXTI_PR)会被置1(即发生了选择的触发请求),软件写1时会清除标志位(变为0)。(IRQN是中断源名称,IRQHandler是中断函数名称)
四:Systick(系统定时器):内核外设的中断优先级由内核 SCB 这个外设的寄存器:SHPRx(x=1.2.3)来配置;外部中断的优先级由内核外设 NVIC 中的 IPx 寄存器控制。

posted @ 2025-06-23 20:56  小智001  阅读(32)  评论(0)    收藏  举报