完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
stm不是有HAL库吗,为啥写寄存器版本的?
在arm里面可没有HAL库一说,都是直接操控寄存器,所以理解芯片手册很重要,当然HAL库很好用 这次解读的stm32 使用外部中断按键控制led灯的代码 开始使用源码分析 先进个main函数 看见我们的重要函数EXTIX_INIT(); 同时使用文档解读 简单来说 1 初始化io口 :设置已经存在的状态 2 让io口和中断线建立映射 :我们外部io中断只有5个,不可能每个io口都能触发 3 设置什么时候io口会触发中断 4 配置nvic(写arm好像没这么复杂啊) 让io口初始化 #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //控制PA(0)为输入 #define WK_UP PAin(0) //看看PA(0)是不是输入 分析 EXTI->PR=1<<0; EXTI 在芯片手册里查找 哎呀还没给base_address 没事继续上去查找 进入寄存器地址 所以base_address 就是 0x40013c00 验证 进入教程的代码查看 #define EXTI ((EXTI_TypeDef *) EXTI_BASE) // 在EXTI base_address 的基础上 构建一个结构体 #define EXTI_BASE (APB2PERIPH_BASE + 0x3C00)//0x40013C00 #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) #define PERIPH_BASE ((uint32_t)0x40000000) 把上面的地址找出来,和我们算的地址一样,芯片手册没看错 我们接着设置 exit_pr 那么pr寄存器就是base_address + 0x14 验证 在这个结构体里 pr的偏移值也是14 给我们的中断线1 初始化 设置触发方式 怎么又帮我把函数写好了,正真开发的时候,还是要自己写这样的函数的 1.使用sys时钟, 2.清零外部中断寄存器 3.在这个寄存器赋值,表示外部中断1,用PC中短线控制 从芯片手册上看,要用外部中断源还是要配制时钟的外部中断寄存器 Ex_NVIC_Config(GPIO_C,13,FTIR); 13/4=3 放在外部中断寄存器3才能配置13口 = EXTICR[3] 并且使用外部中断线1 清零我们的PC SYSCFG->EXTICR[BITx/4]&=~(0x000F0); 配置我们的外部中断线1 接上PC[13] SYSCFG->EXTICR[BITx/4]&=~(0x04<<4); 验证 打开debug 的watch窗口 用这个窗口查看变量值,确实这个值是0x04 同样 也是这个寄存器的发生了改变 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:08 , Processed in 0.801910 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号