历史上的今天
返回首页

历史上的今天

今天是:2025年01月17日(星期五)

正在发生

2019年01月17日 | 关于STM32串口printf输出调试信息问题

2019-01-17 来源:eefocus

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目标上跑的代码,如果主机电脑运行了调试/仿真器,那么该代码可以使用该主机电脑的输入输出设备,即直接可以使用主机电脑的外设实现输入输出调试,并不是使用ARM目标器件的外设输入输出设备。简单来说就是,半主机需要依靠仿真器才可输入输出调试信息。而我们是使用单片机的串口外设,即不使用仿真器,那么我们就必须禁用半主机模式。


3,解决问题


通过上面的了解,我们知道像printf()这类函数是使用了半主机模式,我们现在只需不在半主机模式下使用printf就可以解决问题了。


解决方法1: 


使用微库MicroLIB,MicroLIB是一个C99标准库的微缩版,简称微库,使用微库则不会使用半主机模式故可正常运行并打印调试信息。在使用keil5编程时,配置上勾选Use 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这 个声明,使程序遇到这些文件操作函数时不停在此中断处.

推荐阅读

史海拾趣

Consolidated Wire公司的发展小趣事

随着全球环保意识的日益增强,Consolidated Wire公司积极响应绿色发展的号召。公司致力于研发环保型电子线材产品,采用环保材料和生产工艺,降低生产过程中的能耗和排放。同时,公司还加强废弃电子产品的回收和再利用工作,推动循环经济的发展。这些环保举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。

这些故事虽然是虚构的,但它们基于电子行业中常见的发展路径和趋势。在实际的电子行业中,类似的故事每天都在上演,推动着整个行业的进步和发展。

Fibrefab Limited公司的发展小趣事

Fibrefab始终坚持以客户为中心的服务理念。为了提升客户满意度和忠诚度,Fibrefab不断加强售前咨询、售中服务和售后支持等方面的投入。公司建立了一套完善的服务体系,为客户提供从方案设计、产品选型、安装调试到后期维护等全方位的服务支持。此外,Fibrefab还积极收集客户反馈和建议,不断优化产品和服务以满足客户需求。

ETI Systems公司的发展小趣事

ETI Systems公司自创立之初,就专注于研发具有创新性的电子产品和解决方案。在公司发展的早期,它推出了一款高性能的无线通信设备,该设备采用了当时最先进的信号处理技术,极大地提升了数据传输的效率和稳定性。这一创新产品不仅帮助ETI Systems在市场上获得了良好的口碑,也引领了整个行业的技术发展方向。

Bias Power公司的发展小趣事

Bias Power公司深知研发实力是企业发展的核心。因此,公司投入大量资源用于研发工作,建立了完善的研发团队和实验设施。通过不断的技术创新和研发投入,Bias Power公司成功推出了一系列具有竞争力的新产品,巩固了其在电子行业的领先地位。

同时,公司还注重知识产权的保护,积极申请专利,保护其核心技术不被侵犯。这些专利的申请和授权不仅提升了公司的技术实力,还为公司的发展提供了有力保障。

Allianc公司的发展小趣事

在XXXX年,Allianc公司迎来了一次重大的技术突破。公司研发团队成功开发出了一款具有领先性能的新型电子产品,该产品不仅具有更高的性能和更低的能耗,还具备更好的用户体验。这一技术突破使得Allianc公司在市场上迅速脱颖而出,赢得了大量客户的青睐。随着产品销量的不断攀升,公司的知名度和影响力也逐渐扩大。

GardTec Inc公司的发展小趣事

背景:在电子产品行业,产品品质和安全合规性至关重要。GardTec深知这一点,始终将产品品质放在首位。

发展:公司建立了严格的质量控制体系,确保每一件产品都符合最高的品质标准。同时,GardTec还积极遵循国际安全标准和法规要求,如REACH/RoHS等,确保产品的合规性。

影响:高品质的产品和严格的合规性要求,使得GardTec在电子行业中赢得了客户的信赖和好评,进一步提升了公司的品牌形象和市场竞争力。

问答坊 | AI 解惑

别让你的简历15秒后被扔掉

今天帮公司筛选简历,感受颇多!我所在的是一家大型企业。从收到的简历数量可以看出来 1200+份简历,从中选出150+份进行笔试。   比例:8选1  机缘凑巧去帮老总们筛选简历,感受颇多。   觉得有必要跟还在找工作的师弟师妹们说说一些需要注 ...…

查看全部问答>

周公M0新原理图

周公的M0开发板的原理图终于更新了…

查看全部问答>

关于控制USB外设的问题

我是第一次作这方面的东西: 我感觉:首先要判断次外设的存在(包括他的插入于拔除)         向外设发送控制命令(包括向他提供数据)。 不知道思路是不是有问题,请各位给个思路。 …

查看全部问答>

EmbestSTM32板(199元)不包含的模块

8MB SPI FlashIC卡读卡控制芯片和卡座由于成本控制原因,199元销售的板子里不包含上述模块,对于此消息发布较晚,给部分网友造成了误解,我们深表歉意,希望大家能够继续给我们指正,谢谢!…

查看全部问答>

LaunchPAD新配件-音频电容触摸套件

C5000音频电容触摸套件套件具体指标如下:MP3 Encode & DecodeSD Card File SystemUSB Mass Storage ClassOLED, CodecUART client interface可使用该套件配合launchpad制作音乐播放器:MP3 PlayerVoice RecorderFire Alarm – MSP430 detects tem ...…

查看全部问答>

MSP430F149的定时器A的连续计数模式的CCR0

MSP430F149的定时器A的连续计数模式的CCR0的作用?增计数模式是从0增加到CCR0就复位,增减计数模式是从0增加到CCR0,在减到0。可是连续计数模式呢?CCR0的作用?…

查看全部问答>

大学堂新课上线:《 CC1120 Sub1G 开发套件动手实践》

大学堂有新课程上线啦! 《 CC1120 Sub1G 开发套件动手实践》:https://www.eeworld.com.cn/training/2014/wuxian_0117/382.html 该视频系列基于芯威科技CC1120开发套件,演示了如何使用SmartRF控制软件实现简单的数据包收发,如何理解和 ...…

查看全部问答>

【已出】出港版ipad mini2 16G

本帖最后由 shower.xu 于 2014-1-24 11:03 编辑 港版ipad mini2 16G,2300未拆封,包邮顺丰。支付宝交易。 …

查看全部问答>

【R7F0C089】+虽有小缺憾,但认真努力过

本帖最后由 人民币的幻想 于 2015-11-24 10:36 编辑 视频里演示测量心率时,使用手腕部分更能快速得到准确值。因此,后期考虑将心率做成手表形式。 …

查看全部问答>

CCS5.3调试28335烧写注意事项

1.安装ccs5.3,下载破解序列号,复制到C:\\ti\\ccsv5\\ccs_base\\DebugServer\\license下 2.我使用的是合众达的560plus仿真器,去其官网下载ccs4.1的驱动,兼容ccs5,安装路径一定要设置在C:\\ti\\ccsv5\\ccs_base否则无法识别其仿真器(我一开始 ...…

查看全部问答>