完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
1 题目要求
请用CubeMX建立一个工程并用protes仿真(cpu选择STM32F103R6),完成一个LED灯和一个按键的实验,熟悉GPIO设置和相关工具软件。 实验功能:每次按下按键后,LED灯状态发生翻转(中断方式),按键和LED灯分别连接在PB15和PA0管脚。 2 题目过程 2.1 RCC设置 在用cube配置时钟时,有下面两个选项:
外部晶体/陶瓷谐振器(HSE晶体)模式该时钟源是由外部无源晶体与MCU内部时钟驱动电路共同配合形成,有一定的启动时间,精度较高。 这里选择外部高速时钟的旁路时钟源。 2.2 外部中断设置 点击PB15的GPIO_EXTI15. 然后点击左边框中的GPIO,然后在下面的框中选择下降沿触发,因为一会电路设计的时候为上拉模式。 2.3 LED推挽输出设置 设置如果所示即可。 3 时钟树设置 记住这里一定选择为外部高速时钟提供时钟信号,并且要设置频率低一些,因为proteus不支持过高频率的仿真。 4 代码实现 我们需要自己加一个中断回调函数,当识别到PB15按键按下的时候,PA0电平状态发生反转。 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == GPIO_PIN_15){ if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15) == 0){ HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0); } } } 5 proteus仿真 按下PB15你会发现PA0的LED亮灭的变化。 6 仿真失败的现象和分析问题出错原因 刚开始弄完之后发现仿真不成功,按下按键没有现象,但是把外部中断模式改为普通查询模式之后,就有现象了,所以我可以肯定是中断的问题,并不是相应的LED引脚的问题。 首先我先去检查中断回调函数和判断引脚是否有问题,但是都是对的,那我就怀疑可能是时钟树有问题,后来我去把时钟树中的提供CLOCK的改为内部时钟源之后,其他都没有改变,当再次去仿真之后发现外部中断模式可以用了。 后续经过跟老师的讨论之后发现可能是我在用proteus中没有给STM32F103设置外部时钟源导致的,当我给单片机提供HSE的时候就可以用外部中断模式了,也就是下个章节的原因四。 7 仿真不成功的几个原因 原因一:STM32Cube 在设置时钟树的时SYSCLK频率过高,导致没办法仿真。 原因二:优化等级设置的太高了,设置为Level 1 即可。 原因三:回调函数用错了,void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)这个才是外部中断的回调函数。 原因四:proteus中设置STM32F103的频率要为8M。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1763 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1617 浏览 1 评论
1059 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
723 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1670 浏览 2 评论
1933浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
726浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
566浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
550浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 11:13 , Processed in 0.747475 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号