完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32多串口printf函数
1.hal库 /* USART1专用的printf函数 在usart.c中添加下列函数,还要添加申明头文件#include #include USART1_printf("abcd")用USART2发送字符abcd */ //hal库自定义串口printf函数 void printf2(char * fmt,...) { char buffer[100]; uint16_t i=0; va_list arg_ptr; va_start(arg_ptr,fmt); vsnprintf(buffer,100,fmt,arg_ptr); while(i<99&&buffer) { HAL_UART_Transmit(&huart1,(uint8_t *)&buffer,1,0xFFFF); i++; } va_end(arg_ptr); } 2.固件库 1、申明头文件#include 2、buffer的大小根据需要调整,相应的循环条件也要改,此处可以定义成宏,方便调节buffer大小。 3、定义va_list变量,该变量是一个字符指针,可以理解为指向当前参数的一个指针,取参必须通过这个指针进行。 4、va_start让arg_ptr指向printf函数可变参数里边的第一个参数; 5、vsnprintf()将按照fmt的格式将arg_ptr里的值依次转换成字符保存到buffer中,该函数有最大字符数限制,超过后会被截断,且该函数会自动在字符串末尾加‘ ’。 6、最后必须调用va_end(),由此确保堆栈的正确恢复。 void USART1_printf (char *fmt, ...){ char buffer[USART1_REC_LEN+1]; // 数据长度 u8 i = 0; va_list arg_ptr; va_start(arg_ptr, fmt); vsnprintf(buffer, USART1_REC_LEN+1, fmt, arg_ptr); while ((i < USART1_REC_LEN) && (i < strlen(buffer))){ USART_SendData(USART1, (u8) buffer[i++]); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } va_end(arg_ptr); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1135 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1160 浏览 1 评论
589 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
439 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1055 浏览 2 评论
1629浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
295浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
299浏览 3评论
292浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
266浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-23 12:14 , Processed in 0.663681 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191