stm32程序遇到OSStartHang的问题解决方法总结

遇到的问题,项目中主控程序运行一段时间后,时间有时长有时短便会进入HardFault,通过调试发现进入HardFault的原因是程序进入了OSStartHang异常,网上大部分贴子的介绍如下:

1、因为STM32本身的异常中断PendSV_Handler替代了UCOS的异常中断OSPendSV,使其不能正常执行。这样我们就需要更改PendSV_Handler为OSPendSV以让中断正常。

方法如下:

—startup_stm32f10x_cl.s中定义了中断向量表(中断函数的入口地址)
—stm32f10x_it.c 中断服务函数的C语言代码。
在startup_stm32f10x_cl.s中有两段代码如下:
DCD PendSV_Handler
DCD SysTick_Handler
在stm32f10x_it.c中的服务函数如下
void PendSV_Handler(void)
void SysTick_Handler(void)
1:ucos系统中断函数更名为PendSV_Handler,注释掉stm32f10x_it.c文件中void PendSV_Handler(void)函数。
2:在void SysTick_Handler(void)函数中添加如下代码:
void SysTick_Handler(void)
{
OS_EXIT_CRITICAL();
OSTimeTick(); // Call uC/OS-II’s OSTimeTick()
OSIntExit(); // Tell uC/OS-II that we are leaving the ISR
}

2、如果你是连JTAG调试时偶尔出现的这种情况,不连JTAG板子自己跑时没问题,那么你可以忽略这个问题,因为CONTEX-M3的内核用JTAG调试时偶尔会这样,具体原因不详,可能是JTAG链不够健壮吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 IIC实验中,可能会遇到以下问题: 1. IIC总线无法正常通信 如果IIC总线无法正常通信,可能是因为IIC参数配置不正确或者硬件连接有误导致的。需要确认以下几点: - 确认IIC参数配置正确,包括时钟频率、传输模式、从设备地址等参数 - 确认IIC的时钟已经使能 - 确认IIC硬件连接正确,包括IIC接口、连接线和外部设备等 2. 无法识别从设备或者读取数据错误 如果无法识别从设备或者读取数据错误,可能是因为从设备地址或者数据传输方式不正确导致的。需要确认以下几点: - 确认从设备地址正确,可以通过示波器等工具观察数据传输情况并进行调试 - 确认数据传输方式正确,可以通过示波器等工具观察数据传输情况并进行调试 解决方法: 在使用STM32 IIC总线时,可以采用以下步骤进行配置和编程: 1. 配置IIC参数 使用I2C_Init函数对IIC总线进行配置,设置相应的时钟频率、传输模式、从设备地址等参数。 2. 编写读写函数 根据需要编写IIC读写函数,并在函数中进行相应的处理。需要注意的是,读写函数应该尽可能的简单,避免长时间占用CPU资源,否则可能会影响其他重要任务的执行。 3. 烧录程序程序烧录到STM32芯片中,通过读写函数进行IIC通信,观察数据传输情况和读写函数的执行情况。 需要注意的是,在编写程序时需要遵循一些规范和最佳实践,如使用宏定义等方法来定义常量和变量,避免使用硬编码方式;使用示波器等工具来观察数据传输情况,以便进行调试和优化。同时,建议在进行IIC通信时,先进行单独测试,确保硬件连接正确和从设备地址正确,再进行整体测试,以便减少出错的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值