stm32程序无法进入main函数解决方法

请加扣扣技术交流群:460189483

如图所示,进入调试之后,点击运行run(f5),没有反应,程序也停留在红点 BX RO之处,点击运行F5旁边的向右的黄色小箭头→,进入汇编运行查看,如下图

停留在0x08000908 BEAB BKPT 0xAB 地方,不往下执行,动都不动,原因是可能使用了printf函数。

以前使用printf 都很顺利,程序可以很自然地通过串口输出字符串,最近使用printf时,程序总是进不去,就是连MAIN函数都不会执行了,只要把printf屏蔽了,软件就可以正常运行

这个问题的解决办法是:
在项目设置中 选择 target选项卡 然后选择 USE Mcrolib 这样就可以了
就是说要用printf函数时要用"Use MicroLIB"库,即: C 微库(microlib)

还有一种方法:
标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数,printf输出到串口,只需将putc里面的输出指向串口就行,另外在使用标准库函数时必须避免半主机模式,方法是在main文件里加代码:


void _sys_exit(int x) 

    x = x; 


int fputc(int ch, FILE *f)
{     
    while((USART1->SR&0X40)==0);
    USART1->DR = (u8) ch;      
    return ch;
}

### STM32 程序无法进入 main 函数的原因分析 当遇到STM32程序无法正常进入`main()`函数的情况时,通常涉及启动过程中的多个方面。具体原因可能包括但不限于: - 启动文件配置错误或缺失 - 中断向量表设置不当 - 编译链接选项不正确 - 特定硬件初始化失败 - 断点或其他调试工具干扰[^1] 针对上述情况,建议采取以下措施来排查并解决问题。 #### 验证启动文件和编译链路设置 确保使用的启动文件(startup file)与所选微控制器型号相匹配,并且在项目属性中已正确定义。对于大多数基于ARM Cortex-M系列MCU的应用来说,默认情况下应该使用由芯片厂商提供的标准外设库自带的启动代码。此外,在构建过程中需确认链接脚本里关于内存布局的部分是否准确反映了目标板的实际资源分配状况。 #### 检查中断向量表位置 如果应用程序始终停驻于复位处理程序而未能跳转至主入口,则可能是由于异常/中断向量表未放置于Flash起始地址处所致。可通过调整链接命令行参数或将相应数据段映射到指定区域的方法予以修正。 #### 排除外部因素影响 有时即使软件层面一切就绪,某些外围设备的状态也可能阻碍CPU顺利执行后续指令序列。例如,存在尚未解除的待机模式请求;或者因电源供应不稳定而导致内部振荡源失效等情形均有可能造成此类现象的发生。因此有必要仔细审查电路连接状态以及供电条件等方面是否存在潜在隐患。 #### 利用调试手段辅助诊断 借助集成开发环境所提供的单步跟踪功能逐步跟进每一步骤直至定位确切故障节点不失为一种有效策略。另外值得注意的是,部分场合下即便成功抵达了预期的目标位置却依旧表现得如同停滞一般——这往往是因为触发了某种形式的无限循环结构或是遭遇到了非法访问陷阱等原因引起的。此时可尝试利用ITM通道输出实时日志信息以便更直观地观察当前运行态势变化趋势从而进一步缩小可疑范围[^2]。 ```c // Example of using ITM to output debug messages #include "stm32f4xx.h" void Debug_Init(void){ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; DWT->CTRL |= DWT_CTRL_NOCYCCNT_Msk | DWT_CTRL_CYCCNTENA_Msk; ITM->TCR |= ITM_TCR_ITMENA_Msk; } int ITM_SendChar(int ch) { while (!(ITM->TER & (1 << 0))); ITM->PORT[0].u8 = (uint8_t)ch; return(ch); } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值