STM32L152RC 在keil4中使用printf()和scanf() 函数

发布者:MysticEssence最新更新时间:2018-09-08 来源: eefocus关键字:STM32L152RC  keil4中  printf()  scanf()  函数 手机看文章 扫描二维码
随时随地手机看文章

1、在keil中配置使用Micro LIB,如下图

2、配置USART模块

 void SYS_USARTInit(void)

{

    static USART_InitTypeDef USART_InitStructure;

    static GPIO_InitTypeDef GPIO_InitStructure;


    USART_InitStructure.USART_BaudRate = 115200;

    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;



    /* Enable GPIO clock */

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); 

    /* Enable UART clock */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

    /* Connect PA9 to USARTx_Tx */

    GPIO_PinAFConfig(USE_USART_PORT, USE_USART_TX_GPIO_PinSource, GPIO_AF_USART1);


    /* Connect PA10 to USARTx_Rx */

    GPIO_PinAFConfig(USE_USART_PORT, USE_USART_RX_GPIO_PinSource, GPIO_AF_USART1);


    /* Configure USART Tx PA9 as alternate function push-pull */

    GPIO_InitStructure.GPIO_Pin = USE_USART_TX_PIN;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

    GPIO_Init(USE_USART_PORT, &GPIO_InitStructure);


    /* Configure USART Rx PA10 as alternate function push-pull */

    GPIO_InitStructure.GPIO_Pin = USE_USART_RX_PIN;

    GPIO_Init(USE_USART_PORT, &GPIO_InitStructure);


    /* USART configuration */

    USART_Init(USE_USART, &USART_InitStructure);


    /* Enable USART */

    USART_Cmd(USE_USART, ENABLE);

}


3、重定向printf()


在工程中加入下面代码


#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)

  #define GETCHAR_PROTOTYPE int fgetc(FILE *f)

#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE

{

    /* Place your implementation of fputc here */

    /* e.g. write a character to the USART */

    USART_SendData(USE_USART, (uint8_t)ch);

    /* Loop until transmit data register is empty */

    while (USART_GetFlagStatus(USE_USART, USART_FLAG_TXE) == RESET)

    {}

    return ch;

}

GETCHAR_PROTOTYPE

{

    while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

    return (USART_ReceiveData(USART1));

}


上面三个步骤做完即可在工程中调用printf()和scanf()了。


关键字:STM32L152RC  keil4中  printf()  scanf()  函数 引用地址:STM32L152RC 在keil4中使用printf()和scanf() 函数

上一篇:STM32L152 RTC 日历和定时中断使用
下一篇:STM32L1标准固件库使用

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

stm32 串口格式化打印字符串 函数封装
#include iostream #include windows.h //********************************************** #include stdarg.h #include stdio.h int uart_printf(void* UartHandle,char* buf,size_t bufLen, const char *fmt, ...) { va_list arg; int cnt; #if 1 va_start(arg, fmt); cnt = vsnprintf(buf, bufLen, fmt, arg); //生成的字符串的长度至多
[单片机]
stm32专题十六:IIC(三)stm32 IIC 固件库函数分析
因为I2C通讯非常重要,因此要详细的分析每一个库函数 IIC初始化结构体 /** * @brief I2C Init structure definition */ typedef struct { // 指定时钟频率,这个值不能超过400kHz uint32_t I2C_ClockSpeed; /*! Specifies the clock frequency. This parameter must be set to a value lower than 400kHz */ // IIC模式:可以有3种选择:I2C_Mode_I2C I2C_Mo
[单片机]
stm32专题十六:IIC(三)stm32 IIC 固件库<font color='red'>函数</font>分析
STM32库函数USART_SendData的缺陷和解决方法
2.1 问题及现象 使用USART_SendData()函数非连续发送单个字符是没有问题的;当连续发送字符时(两个字符间没有延时),就会发现发送缓冲区有溢出现象。若发送的数据量很小时,此时串口发送的只是最后一个字符,当发送数据量大时,就会导致发送的数据莫名其妙的丢失。 如: for(TxCounter = 0;TxCounter RxCounter; TxCounter++) USART_SendData(USART1, RxBuffer ); 2. 原因 此API函数不完善,函数体内部没有一个判断一个字符是否发送完毕的语句,而是把数据直接放入发送缓冲区,当连续发送数据时,由于发送移位寄存器的速度限制(与通信波特率有关),导
[单片机]
c51程序调用汇编函数的一种方法
简介:在这个例子里,阐述了编写c51程序调用汇编函数的一种方法,这个外部函数的入口参数是一个字符型变量和一个位变量,返回值是一个整型变量。例如,先用c51写出这个函数的主体,然后用SRC控制指令编译产生asm文件,进一步修改这个asm文件就得到我们所要的汇编函数。该方法让编译器自动完成各种段的安排,提高了汇编程序的编写效率。 step1. 按写普通c51程序方法,建立工程,在里面导入main.c文件和CFUNC.c文件。 相关文件如下: //main.c文件 #include reg51.h #define uchar unsigned char #define uint unsigned int extern
[单片机]
ASM51无参数化调用C51函数的实现原理解析方案
阐述了ASM51无参数化调用C51 函数的实现原理并给出实例来验证该方法的优越性和可行性。文章中表明这样一种观点:“利用汇编语言对I/O接口、中断向量及程序空间分配的巨大优势,让程序员对MCS51内的每一字节甚至是每一比特(可位寻址空间)全部进行统筹安排,设计好各个程序模块,包括I/O口地址和中断向量地址的处理;同时在具体数据处理、通信等不需要过多与硬件打交道的程序模块中,充分利用C51语言强大高效的编程能力”。上述观点并没有错,但是对I/O接口、中断向量及程序空间分配及MCS-51内的每一个字节甚至是每一比特(可位寻址空间)全部进行统筹安排,对于大多数程序员来讲恰恰是件不容易的事。地址空间、栈的起始地址和中断向量地址的分配等,经
[单片机]
基于IEEE802.11b的EPA温度变送器设计
引言    IEEE802.11是IEEE无线局域网标准,主要用于用户终端的无线接入。IEEE802.11只规定了开放式系统互联参考模型的物理层和介质访问子层,其MAC层利用载波监听多路访问/冲突避免(CSMA/CA)协议;定义了单一的MAC层和多样的物理层,其物理层标准主要有IEEE802.11b、IEEE80211a和IEEE80211g。IEEE802.11b标准是IEEE802.11协议标准的扩展,最高可以支持11 Mbps的数据速率,运行在2.4 GHz的ISM频段上,采用的调制技术是CCK,支持数据业务。   本文详细分析了采用S3C2410处理器平台具体实现运用于EPA网络的IEEE802.11b无线实时温度采
[嵌入式]
STM32封装自己的库函数(GPIO初始化)
初始化GPIO 1.确定引脚号 2.确定模式 3.GPIO类型 4.定义上拉或下拉 定义初始化GPIO引脚结构体 typedef unsigned char unit8_t typedef struct { unit32_t GPIO_Pin; GPIOMode_Typedef GPIO_Mode; GPIOOType_Typedef GPIO_OTypde; GPIOSpeed_Typedef GPOI_Speed; GPIO_PuPd_Typedef GPIO_PuPD; }GPIO_InitTypedef; typedef enum { GPIO_Mode_
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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