STM32 printf函数
- /******************** (C) COPYRIGHT 2012 WildFire Team ***************************
- * 文件名 :usart1.c
- * 描述 :将printf函数重定向到USART1。这样就可以用printf函数将单片机的数据
- * 打印到PC上的超级终端或串口调试助手。
- * 库版本 :ST3.5.0
- **********************************************************************************/
- #include "usart1.h"
- #include <stdarg.h>
- /*
- * 函数名:USART1_Config
- * 描述 :USART1 GPIO 配置,工作模式配置。115200 8-N-1
- * 输入 :无
- * 输出 : 无
- * 调用 :外部调用
- */
- void USART1_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- /* config USART1 clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
- /* USART1 GPIO config */
- /* Configure USART1 Tx (PA.09) as alternate function push-pull */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* Configure USART1 Rx (PA.10) as input floating */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* USART1 mode config */
- USART_InitStructure.USART_BaudRate = ;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART1, &USART_InitStructure);
- USART_Cmd(USART1, ENABLE);
- }
- /*
- * 函数名:fputc
- * 描述 :重定向c库函数printf到USART1
- * 输入 :无
- * 输出 :无
- * 调用 :由printf调用
- */
- int fputc(int ch, FILE *f)
- {
- /* 将Printf内容发往串口 */
- USART_SendData(USART1, (unsigned char) ch);
- while (!(USART1->SR & USART_FLAG_TXE));
- return (ch);
- }
- /*
- * 函数名:itoa
- * 描述 :将整形数据转换成字符串
- * 输入 :-radix =10 表示10进制,其他结果为0
- * -value 要转换的整形数
- * -buf 转换后的字符串
- * -radix = 10
- * 输出 :无
- * 返回 :无
- * 调用 :被USART1_printf()调用
- */
- static char *itoa(int value, char *string, int radix)
- {
- int i, d;
- int flag = ;
- char *ptr = string;
- /* This implementation only works for decimal numbers. */
- if (radix != )
- {
- *ptr = ;
- return string;
- }
- if (!value)
- {
- *ptr++ = 0x30;
- *ptr = ;
- return string;
- }
- /* if this is a negative value insert the minus sign. */
- if (value < )
- {
- *ptr++ = '-';
- /* Make the value positive. */
- value *= -;
- }
- for (i = ; i > ; i /= )
- {
- d = value / i;
- if (d || flag)
- {
- *ptr++ = (char)(d + 0x30);
- value -= (d * i);
- flag = ;
- }
- }
- /* Null terminate the string. */
- *ptr = ;
- return string;
- } /* NCL_Itoa */
- /*
- * 函数名:USART1_printf
- * 描述 :格式化输出,类似于C库中的printf,但这里没有用到C库
- * 输入 :-USARTx 串口通道,这里只用到了串口1,即USART1
- * -Data 要发送到串口的内容的指针
- * -... 其他参数
- * 输出 :无
- * 返回 :无
- * 调用 :外部调用
- * 典型应用USART1_printf( USART1, "\r\n this is a demo \r\n" );
- * USART1_printf( USART1, "\r\n %d \r\n", i );
- * USART1_printf( USART1, "\r\n %s \r\n", j );
- */
- void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...)
- {
- const char *s;
- int d;
- char buf[];
- va_list ap;
- va_start(ap, Data);
- while ( *Data != ) // 判断是否到达字符串结束符
- {
- if ( *Data == 0x5c ) //'\'
- {
- switch ( *++Data )
- {
- case 'r': //回车符
- USART_SendData(USARTx, 0x0d);
- Data ++;
- break;
- case 'n': //换行符
- USART_SendData(USARTx, 0x0a);
- Data ++;
- break;
- default:
- Data ++;
- break;
- }
- }
- else if ( *Data == '%')
- { //
- switch ( *++Data )
- {
- case 's': //字符串
- s = va_arg(ap, const char *);
- for ( ; *s; s++)
- {
- USART_SendData(USARTx,*s);
- while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
- }
- Data++;
- break;
- case 'd': //十进制
- d = va_arg(ap, int);
- itoa(d, buf, );
- for (s = buf; *s; s++)
- {
- USART_SendData(USARTx,*s);
- while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
- }
- Data++;
- break;
- default:
- Data++;
- break;
- }
- } /* end of else if */
- else
- USART_SendData(USARTx, *Data++);
- while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );
- }
- }
- /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
STM32 printf函数的更多相关文章
- STM32 printf()函数和scanf()函数重定向到串口
STM32 printf()函数和scanf()函数重定向到串口 printf()函数和scanf()函数重定向 在学习STM32的时候,常常需要用串口来测试代码的正确与否,这时候就要要用到print ...
- 【stm32】实现STM32的串口数据发送和printf函数重定向
在调试电机驱动程序的时候,是不能随便利用中断来进行一些寄存器或数据的查看的,不然你在运行的时候突然来一下,如果占空比大的话那可能直接就把MOS管给烧了,所以我们很多情况下只能使用USART(串口)来进 ...
- STM32中如何对printf函数重定向
通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据,接下来我们现STM32工程上的printf()函数,方便用于程序开发中调试信息的打印. 方法一:使用MicroLIB库 ...
- 如果简化stm32中printf函数的使用——首先重定向
STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印.(HAL库例程)https://blog.csdn.net/wu10188/article/details/9 ...
- 关于STM32中printf函数的重定向问题
printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢? 答案是肯定的,那就是printf函数的 ...
- STM32 的 printf() 函数串口重定向(HAL库标准库都适用)
1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm3 ...
- STM32 KEIL 下的 printf 函数
1 //加入以下代码,支持printf函数,而不需要选择use MicroLIB 2 #if 1 3 #pragma import(__use_no_semihosting) 4 //标准库需要的支持 ...
- 单片机中printf函数的重映射
单片机中printf函数的重映射 一.源自于:大侠有话说 1.如果你在学习单片机之前学过C语言,那么一定知道printf这个函数.它最最好用的功能 除了打印你想要的字符到屏幕上外,还能把数字进行格式化 ...
- 如何在单片机上使用printf函数(printf)(avr)(stm)(lpc)(单片机)(转)
摘要: 当我们在调试代码时,通常需要将程序中的某个变量打印至PC机上,来判断我们的程序是否按预期的运行,printf函数很好的做到了这一点,它能直接以字符的方式输出变量名和变量的值,printf ...
随机推荐
- Java中的内部类————以及jdk1.8的lambda表达式
一.内部类学习导图 1>.静态内部类: 使用static修饰符来修饰内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象.因此使用static修饰的内部类被称为静态内部类. publi ...
- 百练6247-过滤多余的空格-2015正式B题
B:过滤多余的空格 总时间限制: 1000ms 内存限制: 65536kB 描述 一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格. 输入 一行,一个字符串(长度不超过200),句子的 ...
- 百练8216-分段函数-2016正式A题
百练 / 2016计算机学科夏令营上机考试 已经结束 题目 排名 状态 统计 提问 A:分段函数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序 ...
- 九度OJ1111题-单词替换
题目1111:单词替换 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6752 解决:1891 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组 ...
- js 调用 手机 相机摄像机麦克风
https://www.cnblogs.com/avon/p/5996368.html
- 安装,配置,启动FTP,SSH,NFS服务
1.安装,配置,启动FTP服务 sudo apt-get install vsftpd 修改vsftpd的配置文件/etx/vsftpd/.config,将下面几行前面的“#”去掉 #local_en ...
- AangularJS入门总结三
(参考的资料) 1. 数据绑定的原理: (1) $watch 队列: 在DOM中每次绑定一些东西,就会往$watch队列中插入一条$watch: 每一个绑定到了DOM上的数据都会生成一个$watch ...
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.4 约束(Pattern的一部分)
4.4.3 约束(Pattern的一部分) 前面我们已经介绍了条件约束在Pattern中位置了,那么什么是条件约束呢?简单来说就是一个返回true或者false的表达式,比如下面的5小于6,就是一个约 ...
- mac 打印机无法打印
每次打印word的时候都无法正常打印,提示嘀嘀响声. 文件->页面设置-> 纸张A4 即可
- get android or ios appname
get app name from GP or itunes var superagent = require('superagent'); var cheerio = require('cheeri ...