1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
关于STM32串口打印f输出调试信息问题
1、遇到的问题(使用HAL库) 在STM32使用过程中,我们程序调试时一般都会用到printf重定向串口输出调试信息来进行程序开发调试,从网上我们找到了重定向的代码部分加入到串口代码文件中,如下: UART_HandleTypeDef husart_printf; #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the USART2 and Loop until the end of transmission */ HAL_UART_Transmit(&husart_printf, (uint8_t *)&ch, 1, 0xFFFF); return ch; } 程序编辑好,本以为可以直接出消息从接口输出,但是程序下可以打印出任何信息到接口,这好像打印出来了,难道是上面产生的部分不对? 2,找到问题 在网上又搜索,发现半主机模式这样一个模式。输入输出设备,即直接可以使用主机电脑的外设实现输入输出调试,不使用ARM目标的外设输入输出设备。简单就是,半主机需要依靠仿真器可输入输出调试信息。我们是使用单片机的串口外设,即不使用仿真器,那么我们就必须禁用半主机模式。 3,问题解决 通过上面的了解,我们知道像printf()的这类函数是使用了半主机模式,我们现在只需不在半主机模式下使用的printf就可以解决问题了。 解决方法1: 使用微库microlib中,microlib中是一个C99标准库的微缩版,简称微库,使用微库则不会使用半主机模式故可正常运行并打印调试信息在使用keil5编程时,配置上勾选使用microlib中即可,关于microlib中详细信息可以自行搜索。 解决方法2: 使用标准库,但是禁用半主机模式,如何实现,只需在主程序后添加如下代码: #pragma import(__use_no_semihosting) int _sys_exit(int x) { x = x; } struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; /* FILE is typedef’ d in stdio.h. */ FILE __stdout; __use_no_semihosting_swi,即不使用半主机模式, 因中并没有对这些函数的程序实现,所以设备运行时会进入软件中断BAEB处,衣服就需要__use_no_semihosting_swi这个声明,使程序遇到这些文件操作函数时不时在此中断处。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 12:49 , Processed in 0.724100 second(s), Total 78, Slave 61 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号