关于Stm32串口输出模仿printf编写的函数方法(野火stm32F103指南者板适用)

我在Stm32串口编程中遇到的一些很有用的函数

下面的这几个函数和测试是我在Stm32串口编程中遇到的一些对新人极不友好 的函数,但是学会之后非常的好用!!写好一次,以后可以直接复制粘贴了!!
再说一遍,这几个函数主要是围绕串口输出的哦。
最后一部分是我自己编写的输出函数,模仿printf就直接输出了,虽然也可以函数重定向,但是重定向不如这种方式灵活。
串口初始化就直接跳过,例程网上非常丰富。

1、va_list va_start(ap, variable) va_arg(ap, type) va_end(ap)

//当出现可变数量的入参时的va_list、va_start
va_list ap; 定义一个va_list变量ap
va_start(ap,v);执行ap = (va_list)&v + _INTSIZEOF(v),ap指向参数v之后的那个参数的地址,即ap指向第一个可变参数在堆栈的地址。
va_arg(ap,t)( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )取出当前ap指针所指的值,并使ap指向下一个参数。
ap+= sizeof(t类型),让ap指向下一个参数的地址。然后返回ap-sizeof(t类型)的t类型指针,这正是第一个可变参数在堆栈里的地址。然后
用取得这个地址的内容。
va_end(ap); 清空va_list ap。
//示例,这个函数就是我们的串口输出函数,把串口的输出写成模拟printf的形式
void u3_printf(char* fmt, ...)  
{
     
	u16 i,j;
	va_list ap;
	va_start(ap,fmt);//初始化ap,ap指向第二个开始的参数(第一个参数后)
	vsprintf((char*)USART3_TX_BUF,fmt,ap);//将ap根据format格式化后填入数组
	va_end(ap);//结束可变参数获取
	i=strlen((const char*)USART3_TX_BUF);		//此次发送数据的长度
	for(j=0;j<i;j++)							//循环发送数据
	{
   
	  while(USART_GetFlagStatus(USART3<
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值