6步教你在STM32程序中添加 printf函数

发布者:zhihua最新更新时间:2016-08-21 来源: eefocus关键字:STM32程序  printf函数 手机看文章 扫描二维码
随时随地手机看文章
前提是你有一个完整的keil工程 比如ADC的

 

调试的时候很多时候用到串口 这里教你怎么样使用Printf 函数

在程序中添加Printf
1,
#include
2,
/* Private functions ---------------------------------------------------------*/ 下添加

void USART_Configuration(void);

#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

3,添加如下2个函数 usart配置 和 重定向 C库的printf函数
void USART_Configuration()
{
/* USARTx configured as follow:
        - BaudRate = 9600 baud 
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
*/
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure USART1 Tx (PA9) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure USART1 Rx (PA10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);


USART_InitStructure.USART_BaudRate = 9600;
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);
/* Enable USART1 */
USART_Cmd(USART1, ENABLE);
}

/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
USART_SendData(USART1, (uint8_t) ch);

/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}

return ch;
}
4,

void RCC_Configuration(void) 添加 
/* Enable GPIOA and USART1 clocks */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
5,
STM32F10x.CONF.H

去掉/* #include "stm32f10x_usart.h" */ 的注释
6,
在Main()中添加

void USART_Configuration()

然后就可以在main()调用

printf("The is a example!" );

printf("%s%c%c%c%c%c%s",
           "#**",
           Value/256,Value%256,
          '&',
           Value_2/256,Value_2%256,
          "**%");

之类的输出函数

关键字:STM32程序  printf函数 引用地址:6步教你在STM32程序中添加 printf函数

上一篇:STM32 CAN滤波器设置 Identifier filter
下一篇:STM32 SD卡_没有加文件系统

推荐阅读最新更新时间:2024-03-16 15:06

STM32有关SPI实现DMA程序应用小记
特别针对SPI-DMA的发送和接收做了一次对比实验, 实验发现:当STM作为主设备向其它设备传送SPI数据时,DMA传送完成时中断,可进入中断程序,并在此时对SPI返回数据处理。SPI的返回数据在DMA-SPI-RX缓存中。 值得注意的是:返回数据的处理必须是DMA-SPI-TX传输完成中断后执行,不能在DMA-SPI-RX传输完成中断后执行,否则会出错。 以上是STM作为SPI主设备时的一些发现,当时就是在返回处理数据在DMA-SPI-RX完成中断后处理发生了问题。
[单片机]
arm串口实现 printf 和scanf函数
问题描述:arm串口实现scanf和printf函数实现输入一串十进制数字换成十六进制输出功能,但是我的板子测试就是出不来,于是乎我要彻底搞定它,随有纪。 1.首先代码分析:用sourceinsight建立一个工程: 第一个文件Ctype.h,注意不会处理EOF,即end of file。其中的宏定义定义了_U _L _D _C _P _S _X _SP,分别代表的数字标识,这个数字标识在Ctype.c中用到。extern unsigned char _ctype 作用是把_ctype 声明为外部的全局变量,不但包含这个头文件的多个文件可以使用,也避免了重复包含这个变量的作用。 #define __ismask(x) (_ctyp
[单片机]
通过串口给STM32烧写程序
一。将BOOT0置1,BOOT1置0 BOOT0没有接短路块,为高电平。 二。通过USB转串口模块连接电脑与电路板 模块的GND连接电路板的GND,模块的TXD连接电路板的RX,模块的RXD连接电路板的TX 注:电路板的TX与RX分别为STM32的TXD1与RXD1(PA9和PA10) 将电路板上电。 三。运行软件Flash Loader Demo 注:运行程序前电路板一定要上电,否则软件无法运行。 串口系统识别为COM3,按“Next” 软件识别出STM32为128KB的Flash,继续按“Next” 继续按“Next” 选择所要写入的HEX程序,点击“Next”,开始写入程序 写入完
[单片机]
通过串口给<font color='red'>STM32</font>烧写<font color='red'>程序</font>
STM32从Flash中运行程序的时序分析
都知道STM32的CPU时钟频率可以达到72MHz,以后还会更快,但是由于半导体制造工艺的限制,存放程序的Flash存储器不可能达到这么高的工作频率,这样当CPU直接访问Flash存储器时必须插入等待周期以得到正确的结果。 问题是在Flash的速度比CPU慢的情况下,是不是可以简单地说STM32在执行Flash中的程序时每条指令都需要插入等待周期呢?等待周期的插入对程序的执行到底有多大的影响?请看下面的分析: 首先,STM32的内部Flash是组织成64位宽度,即每次可以读出64位;在Flash与CPU的取指队列之间有两个缓冲器,用于暂存Flash中取出的指令,见下图。 其次,STM32的指令有16位的也有32
[单片机]
<font color='red'>STM32</font>从Flash中运行<font color='red'>程序</font>的时序分析
基于STM32内置ADC实现简易示波器的程序设计与实现
  做一个数字采样示波器一直是我长久以来的愿望,不过毕竟这个目标难度比较大,涉及的方面实在太多,模拟前端电路、高速ADC、单片机、CPLD/FPGA、通讯、上位机程序、数据处理等等,不是一下子就能成的,慢慢一步步来呗,呵呵,好歹有个目标,一直在学习各方面的知识,也有动力:)由于高速ADC涉及到采样后的数据存储问题,大量的数据涌入使得单片机无法承受,因此通常需要用外部高速RAM加CPLD配合,或者干脆用大容量的 FPGA做数据存储处理等,然后通知单片机将数据发送出去。这部分实在是难度比较大,电路非常复杂,自己是有心无力啊,还得慢慢地技术积累。。。   正好ST新推出市场的以CORTEX-M3为核心的STM32,内部集成了2个1M
[测试测量]
基于<font color='red'>STM32</font>内置ADC实现简易示波器的<font color='red'>程序</font>设计与实现
STM32 printf函数打印到串口
学习STM32过程中,经常打交道的莫过于串口,你可以将任何信息,当然重要的是调试信息打印到串口中输出,总是用一个字节发送函数或者字符串发送函数总是有些不放便,之前编程中熟悉的莫过于printf了,下面就给出了用printf打印到串口的方案,当然方案不止一个,仅供参考。 1、 添加printf的头文件 #include int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); return ch; } 3、修改一下选中Us
[单片机]
PIC中实现printf函数出现:Warning [2066]
为什么会出现“Warning type qualifier mismatch in assignment”(警告 指定的类型限定符不匹配)? 解答: MPLAB C18提供的库是使用大代码模型编译(-ml 命令行选项)的。默认情况下,MPLAB IDE和编译器将使用小代码模型编译应用程序。例如,随编译器提供的printf函数期望收到“const far rom char *”,但没有为应用程序选择大代码模型时,应用程序实际发送“const near rom char *”到printf 函数。正是far和near间的差别引起了“type qualifier mismatch in assignment”警告。要消除这些警告,
[单片机]
通过USB转TTL串口下载stm32程序
目录: 1.硬件及其接线 2.驱动及软件 3.下载程序测试 1.硬件及其接线 1.1 USB转TTL刷机板(CH340模块升级小板) 1.2 主芯片STM32F103C8T6开发板 1.3接线 1.3.1 转串口模块接线 注:3V3和5V由短路冒选择。 1.3.2 核心板接线 其中 BOOT0置1,BOOT1置0。 2.驱动及软件 2.1 CH340驱动及安装方法 2.2 程序下载软件 3.下载测试 下载实验一流水灯程序测试。 实验一流水灯 写入程序成功后,将BOO0与BOOT1均置为0。 实验结果显示程序按预定设想成
[单片机]
通过USB转TTL串口下载<font color='red'>stm32</font><font color='red'>程序</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved