stm32 printf输出到USART1

发布者:机械梦想家最新更新时间:2015-05-04 来源: 51hei关键字:stm32  printf输出  USART1 手机看文章 扫描二维码
随时随地手机看文章


/************************头文件*****************************************/

#include"stm32f10x_lib.h" //包含所有的头文件
#include

 

/*******************************位绑定定义*****************************************/
//#define GPIOA_ODR_A  (GPIOA_BASE+0x0C)
//#define GPIOA_IDR_A  (GPIOA_BASE+0x08)
//#define GPIOB_ODR_A  (GPIOB_BASE+0x0C)
//#define GPIOB_IDR_A  (GPIOB_BASE+0x08)
//#define GPIOC_ODR_A  (GPIOC_BASE+0x0C)
//#define GPIOC_IDR_A  (GPIOC_BASE+0x08)
//#define GPIOD_ODR_A  (GPIOD_BASE+0x0C)
//#define GPIOD_IDR_A  (GPIOD_BASE+0x08)
//#define GPIOE_ODR_A  (GPIOE_BASE+0x0C)
//#define GPIOE_IDR_A  (GPIOE_BASE+0x08)
//
//#define BitBand(Addr,BitNum)    *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))
//
//#define PAout(n)   BitBand(GPIOA_ODR_A,n)
//#define PAin(n)    BitBand(GPIOA_IDR_A,n)
//#define PBout(n)   BitBand(GPIOB_ODR_A,n)
//#define PBin(n)    BitBand(GPIOB_IDR_A,n)
//#define PCout(n)   BitBand(GPIOC_ODR_A,n)
//#define PCin(n)    BitBand(GPIOC_IDR_A,n)
//#define PDout(n)   BitBand(GPIOD_ODR_A,n)
//#define PDin(n)    BitBand(GPIOD_IDR_A,n)
//#define PEout(n)   BitBand(GPIOE_ODR_A,n)
//#define PEin(n)    BitBand(GPIOE_IDR_A,n)


/*******************************************************************************/
/* 函数名  : RCC_Configuration                                                 */
/* 功能    : 初始化外部时钟                                                    */
/* 输入    : None                                                              */
/* 输出    : None                                                              */
/* 返回    : None                                                              */
/********************************************************************************/
void RCC_Configuration(void)
{
//----------使用外部RC晶振-----------
RCC_DeInit(); //初始化为缺省值
RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能预取指缓存
FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器2延时周期
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB时钟等于系统时钟HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //高速AHB时钟(PCLK2)PCLK2 =  HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //低速AHB时钟(PCLK1)PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待 PLLCLK 准备好
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择 PLL 为系统时钟
while(RCC_GetSYSCLKSource()!=0x08); //等待系统使用PLL为系统时钟
//---------打开相应外设时钟--------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1,  ENABLE );
}


/*******************************************************************************/
/* 函数名  : GPIO_Configuration                                                */
/* 功能    : 初始化GPIO外设                                                    */
/* 输入    : None                                                              */
/* 输出    : None                                                              */
/* 返回    : None                                                              */
/*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO;

 

GPIO.GPIO_Pin =GPIO_Pin_9;
GPIO.GPIO_Speed =GPIO_Speed_50MHz;
GPIO.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO); //端口初始化

GPIO.GPIO_Pin =GPIO_Pin_10;

GPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO); //端口初始化
}

 

 

/*******************************************************************************/
/* 函数名  : Delay_MS                                                          */
/* 功能    : 软件延时                                                          */
/* 输入    : 1ms                                                               */
/* 输出    : None                                                              */
/* 返回    : None                                                              */
/*******************************************************************************/
 void Delay_MS(u16 dly)
{
u16 i,j;
for(i=0;i for(j=1000;j>0;j--);
}


void USART_Configuration(void) //初始化USART
{ USART_InitTypeDef USART_InitStructure; //声明参数结构
USART_InitStructure.USART_BaudRate =  9600; //速率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); //根据USART_InitStruct中指定的参数初始化外设USART1寄存器

USART_Cmd(USART1,ENABLE);//开启USART外设


}
/*******************************************************************************/
/* 函数名  : fputc                                                              */
/* 功能    : 重定向printf输出到USART1                                           */
/* 输入    : int ch 字符  FILE *f 文件指针                                      */
/* 输出    : ch                                                                 */
/* 返回    : ch                                                                 */
/********************************************************************************/


int fputc(int ch,FILE *f)
{
//ch送给USART1
USART_SendData(USART1, ch);
//等待发送完毕
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET) { }
//返回ch
return(ch);
}
/*******************************************************************************/
/* 函数名  : main                                                              */
/* 功能    : 主函数                                                            */
/* 输入    : None                                                              */
/* 输出    : None                                                              */
/* 返回    : None                                                              */
/*******************************************************************************/
int  main(void)
{

u8 i=58;
RCC_Configuration();
GPIO_Configuration();
USART_Configuration();

 

while(1)
{
 
    printf(" qq 2519286938");
printf(" i value is   %d",i);
printf(" i value is   %o",i);
printf(" i value is   %d,  %d",i+i,i*i);
printf(" -----------------------------");


}

}

关键字:stm32  printf输出  USART1 引用地址:stm32 printf输出到USART1

上一篇:STM32 USART 串口简单使用
下一篇:STM32 103 USART

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

比较精简的stm32编码器程序
01.#define ROTATE_A PAin(2) 02.#define ROTATE_B PAin(3) 03.s16 DATA=0; 04. 05.void EXti2_IRQHandler(void) 06.{ 07. IF(EXTI_GetITStatus(EXTI_Line2) != RESET) 08. { 09. if(ROTATE_A!=ROTATE_B) 10. { 11. DATA++; 12. } 13. else DATA--; 14. EXTI_ClearITPendingBit(EXTI_Line2); 15. }
[单片机]
比较精简的<font color='red'>stm32</font>编码器程序
STM32USB的枚举过程简介
之前的说明: 文中大量引用网上资料,在文后已给出资料的引用说明。文件涉及到的USB各种传输包各个位的含义以及USB标准设备请求的含义都没有做说明,推荐看《圈圈教你玩USB》里面有详细的说明 一、枚举前的工作 系统上电后,程序开始运行,简单介绍一下USB的初始化 根据STM32的USB库做移植,介绍枚举过程 SetSystem函数是一些初始化化设置,因为我在之前已经做了初始化的操作,所以把这个函数就删了。 首先系统执行USB中断设置:USB_Interrupts_Config();//设置中断向量表,设置优先级 然后执行USB时钟设置:Set_USBClock();//时钟设置
[单片机]
STM32USB的枚举过程简介
stm32串口中断收发数据环形缓冲区的设计
/******************************************************************************* * Function Name : USART2_IRQHandler * Description : This function handles USART2 global interrupt request. * Input : None * Output : None * Return : None **********************************************************
[单片机]
STM32】DMA基本原理、寄存器、库函数(1)
DMA的基本介绍 01 DMA的基本定义 DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。 02 DMA的主要特征 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置; 在同一个DMA模块上,多个请求间的优先权可
[单片机]
如何利用PCB设计stm32单片机
单片机是现代电子产品中不可或缺的组成部分,它在自动化控制、通讯、仪器仪表、家电、安防等领域有着广泛的应用。而PCB(Printed Circuit Board)也是电子设计中不可或缺的一环,是来集成各种元器件的载体。那么,如何利用PCB设计stm32单片机呢?本文将为大家解答这个问题。 首先,我们需要明确stm32单片机的基本架构和性能特点。stm32单片机采用了Cortex-M内核架构,并具有低功耗、高速、低噪音等特点。在使用stm32单片机设计电路时,我们需要对其数据和控制信号进行充分的了解,从而根据自己项目的需求选择合适的芯片。 接下来,我们来介绍如何利用PCB设计stm32单片机。首先,我们需要通过软件绘制PCB电
[单片机]
stm32 io 口配置和使用
1.io的模式 对于stm32 GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 在使用stm32单片机时这几个概念是需要搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总结: 一
[单片机]
<font color='red'>stm32</font> io 口配置和使用
STM32 SD bootloader实现
前几天在网上看到了一个sd bootloader,但是下载需要积分。于是想着自己写个简单的sd卡的bootloader,实际上就是stm32的iap功能了。简单介绍一下stm32的iap吧,以下内容摘抄自网络。 IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过某种通信管道(如USB、USART)接收程序
[单片机]
<font color='red'>STM32</font> SD bootloader实现
STMCU应用过程中与电源相关的案例分享
我们在从事STM32单片机的应用开发及调试过程中,往往会碰到各类异常。其中有不少比例的问题跟电源有关。对于一个电子产品而言,电源部分很关键、很重要,但在实际开发调试中,我们偶尔会有意无意的忽视它。这里分享几个实际案例,以加强刺激,加深印象。 毕竟因为电源问题可能导致的异常很多很多,这里分享几个案例算是抛砖引玉,希望大家在调试中对电源方面加以重视。个人认为,往往电源出问题时导致的异常时并不太好分析。多数时候异常表现得更为诡异或没章法。 注:下面提到的案例中异常原因都与电源有关,但并不是说出现类似异常时一定是电源的原因。 下面主要分享五个基于STM32应用的案例。 案例1:STM32芯片的PLL无法正常工作。 有人使用STM3
[单片机]
STMCU应用过程中与电源相关的案例分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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