Emwin卡死进入HardFault_Handler,寄存器操作错误原因

 问题描述

        项目是在F469用emwin搭建的界面,使用Hal库编写,写完一个功能之后,运行测试时,发现界面卡死,进入HardFault_Handler异常。debug之后,发现是由Hal库操作寄存寄存器的代码引起的:

#define DS28EIO_IN()  {GPIOC->MODER&=(0<<(1*2));GPIOC->MODER|=(0<<(1*2));}     /
#define DS28EIO_OUT() {GPIOC->MODER&=(0<<(1*2));GPIOC->MODER|=(1<<(1*2));}  

解决方案:

        使用按位取反符号来对寄存器对应引脚赋值:

#define DS28EIO_IN()  {GPIOC->MODER&=~(3<<(1*2));GPIOC->MODER|=(0<<(1*2));}     
#define DS28EIO_OUT() {GPIOC->MODER&=~(3<<(1*2));GPIOC->MODER|=(1<<(1*2));}  

补充内容(Hal库操作寄存器方法):

        在 GPIO 端口中,每个引脚都有特定的模式,例如输入模式、通用输出模式、复用功能模式或模拟模式。MODER 寄存器是一个 32 位的寄存器,每个引脚对应一个或多个位,其中每个位对应引脚的模式设置。引脚模式的设置值如下:

  • 00:输入模式(复位状态)
  • 01:通用输出模式
  • 10:复用功能模式
  • 11:模拟模式

         对应Pin0-Pin15管脚正好有16个,所以32位的寄存器就可以设置每个管脚对应的输入或者输出状态,在Hal库编程中使用寄存器操作,会使CPU运行更加高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值