vofa justfloat 使用printf的解决办法 stm32

union transform 
{
	float ADC_ConvertedValueLocal[NOFCHANEL];
	char ADC_CHAR[NOFCHANEL*4+4];
} ;
union transform t;
 

		

void Test_ADC_PRINTF(void)
{    t.ADC_CHAR[NOFCHANEL*4+0]=0x00;
			 t.ADC_CHAR[NOFCHANEL*4+1]=0x00;
			 t.ADC_CHAR[NOFCHANEL*4+2]=0x80;
			 t.ADC_CHAR[NOFCHANEL*4+3]=0x7f; 
    while (1)
    { 
        t.ADC_ConvertedValueLocal[0] = (float)ADC_ConvertedValue[0] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[1] = (float)ADC_ConvertedValue[1] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[2] = (float)ADC_ConvertedValue[2] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[3] = (float)ADC_ConvertedValue[3] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[4] = (float)ADC_ConvertedValue[4] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[5] = (float)ADC_ConvertedValue[5] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[6] = (float)ADC_ConvertedValue[6] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[7] = (float)ADC_ConvertedValue[7] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[8] = (float)ADC_ConvertedValue[8] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[9] = (float)ADC_ConvertedValue[9] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[10] = (float)ADC_ConvertedValue[10] / 4096.0f * 3.3f * 1.5f;
        t.ADC_ConvertedValueLocal[11] = (float)ADC_ConvertedValue[11] / 4096.0f * 3.3f * 1.5f;
         
			 	for (int i=0;i<(NOFCHANEL*4+4);i++)
			{
				
				printf("%c",t.ADC_CHAR[i]);
			}
			
			
			 Delay_MS(1);
      
    }
}

这里面ADC_ConvertedValueLocal[NOFCHANEL]是用来接受adc采集的数组,你完全可以把他换成其他,NOFCHANEL是通道数,其实就是12,通过联合我把float转化成了4个char数组。

另外 Delay_MS(1);是写的延时函数,cv的时候别带上去。

在718的考核中遇到了这个问题,满互联网的找也找不到,太痛苦了,但是终于解决了,希望对后来人有所帮助。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以在STM32CubeMX中使用printf函数来进行调试输出。首先,在"Project"选项卡中,选择"Settings",然后在"Code Generator"部分的"Toolchain/IDE"下拉菜单中选择你使用的编译器。确保选择了正确的编译器,这样CubeMX会自动生成相应的初始化代码。 接下来,在"Configuration"选项卡的"Middleware"部分,找到"USARTx"(x为你选择的串口号)并启用它。选择合适的波特率和其他参数。 然后,在生成代码后的工程文件中找到main.c文件,并打开它。你需要在头文件部分添加以下代码: ```c #include <stdio.h> #include "usart.h" ``` 然后,在main函数中,你需要初始化USART,并使用freopen函数将标准输出重定向到USART。下面是一个示例代码: ```c int main(void) { /* 初始化外设 */ /* 初始化USART */ MX_USART1_UART_Init(); /* 将标准输出重定向到USART */ freopen("USART1:", "w", stdout); /* 开始你的代码 */ while (1) { printf("Hello, World!\r\n"); HAL_Delay(1000); } } ``` 在上面的示例代码中,我们调用了printf函数并打印了"Hello, World!"字符串。由于我们将标准输出重定向到了USART1,所以这个字符串将会通过USART1发送出去。 注意,使用printf函数输出的数据会通过串口发送,因此你需要连接串口线将STM32开发板与PC连接起来,并使用串口调试工具(如Tera Term、Putty等)来查看输出结果。 希望这个回答对你有帮助!如有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值