完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
看了好多的文章都是重写的函数__io_putchar 和 fputc
/* USER CODE BEGIN 0 */ #include "stdio.h" #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) PUTCHAR_PROTOTYPE { // 注意下面第一个参数是&huart1,因为cubemx配置了串口1自动生成的 HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY); return ch; } #endif /* USER CODE END 0 */ 上面的方法在之前的版本中是可行的。 现在的版本升级以后就变了。 必须重写_write函数。 搞了好半天,最后搞通了。 串口怎么配置的就不细述了。 只要在main.c文件中。 USER CODE BEGIN 0 之间加入下面这段代码即可 网上有的文章只写了第二个函数 __io_putchar 却没写必须要重新定义 _write 函数 这里是两个函数都必须实现的。 attribute((weak))的作用是叫弱函数 _write函數在syscalls.c中, 使用__weak定義, 所以可以直接在其他文件中定義_write函數 之前只需要重写一个__io_putchar函数就能运行,我猜是因为stdio.h里面的代码变了。 /* USER CODE BEGIN 0 */ #include "stdio.h" // 重定向print start int __io_putchar(int ch) { //具体哪个串口可以更改USART1为其它串口 while ((USART1->SR & 0X40) == 0); //循环发送,直到发送完毕 USART1->DR = (uint8_t) ch; return ch; } //_write函數在syscalls.c中, 使用__weak定義, 所以可以直接在其他文件中定義_write函數 __attribute__((weak)) int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar(*ptr++); } return len; } // 重定向print end /* USER CODE END 0 */ 或者两个合并成一个函数 /* USER CODE BEGIN 0 */ #include "stdio.h" // 重定向print start int __io_putchar(int ch) { //具体哪个串口可以更改USART1为其它串口 while ((USART1->SR & 0X40) == 0); //循环发送,直到发送完毕 USART1->DR = (uint8_t) ch; return ch; } //_write函數在syscalls.c中, 使用__weak定義, 所以可以直接在其他文件中定義_write函數 __attribute__((weak)) int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar(*ptr++); } return len; } // 重定向print end /* USER CODE END 0 */ 再来个更简洁的 /* USER CODE BEGIN 0 */ #include "stdio.h" // 重定向printf start //_write函數在syscalls.c中, 使用__weak定義, 所以可以直接在其他文件中定義_write函數 __attribute__((weak)) int _write(int file, char *ptr, int len) { if(HAL_UART_Transmit(&huart1,ptr,len,0xffff) != HAL_OK) { Error_Handler(); } } // 重定向printf end 如果要让printf 支持浮点数 %f 还需要打开配置。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1801 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
745浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
578浏览 3评论
601浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 08:19 , Processed in 0.759487 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号