历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2019年01月29日 | stm32 printf函数重定向

2019-01-29 来源:eefocus

#include "stm32f10x.h"

#include "stdio.h"

 

 

void RCC_Configuration(void);//首先设置系统时钟为8MHZ

void GPIO_Configuration(void);

void USART_Configuration(void);

 

 

/*

 

Function Name   : fputc

Description     : 重定向这个C库中的(stdio) printf函数,文件流到串口流USART1

Input           : ch,*f

Output          : None

Return          : None

 

 

*/

 

int fputc(int ch,FILE *f){

 

  //ch送给USART1

USART_SendData(USART1, ch);  //发送数据

 

//等待发送完毕

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

 

//返回ch

  return(ch);

 

 

}

 

void delay1ms(u16 t){

    u16 i,j;

   for(i=0;i

     for(j=1000;j>0;j++);

 }

 

 

 

 int main(void){

 

 

  u8 i,data='A';

    RCC_Configuration();

    GPIO_Configuration();

  USART_Configuration();

    for(i=0;i<30;i++){

USART_SendData(USART1, data);  //发送数据

    data++;

 

    //Status = USART_GetFlagStatus(USART1, USART_FLAG_TC);

    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);//USART_SR的TC置一,表示发送数据完成;否则没有完成;

}

printf("hello");

 return 0;

 }

void RCC_Configuration(void)//系统时钟设置,应用库函数编程过程

{

//----------使用外部RC晶振-----------

RCC_DeInit(); //初始化为缺省值

RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 

while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪

//FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer

//FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state

RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK

RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 =  HCLK

RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ,系统给外设的时钟fpclkx

RCC_PLLCmd(ENABLE); //Enable PLLCLK

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock

while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source

//---------打开相应外设时钟--------------------

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外设的GPIOA的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能APB2外设的GPIOC的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

//GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);  

 

}

void GPIO_Configuration(void)//复用引脚设置

{

  GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure USARTx_Tx 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 USARTx_Rx as input floating */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//浮空输入

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

}

void USART_Configuration(void)//复用引脚设置

{

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 9600;//波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //8位数据

USART_InitStructure.USART_StopBits = USART_StopBits_1;       //停止位1位

USART_InitStructure.USART_Parity = USART_Parity_No;          //不需要奇偶校验

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不需要硬件流控制

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能,接收使能

USART_Init(USART1, &USART_InitStructure);//初始化

    USART_Cmd(USART1, ENABLE);  //UE使能

}


推荐阅读

史海拾趣

A1 PROS公司的发展小趣事

在2000年,A1 PROS在韩国正式成立,初创期的它,主要专注于黑白CCD芯片的研发与生产。当时,随着数字技术的兴起,电子摄像头逐渐普及,市场对高质量的图像传感器需求日益增长。A1 PROS凭借其核心团队在半导体技术方面的深厚积累,成功研发出多款性能优越的黑白CCD芯片,并很快在市场上占据了一席之地。

为了拓展业务,A1 PROS积极寻求合作伙伴。2003年,它与台湾的昱生电子有限公司建立了合作关系,后者成为A1 PROS在台湾地区的主要经销商。这一合作不仅帮助A1 PROS打开了台湾市场,也为后续进军更广阔的亚洲市场奠定了基础。

东晶(ECEC)公司的发展小趣事

为了满足市场需求和降低成本,东晶电子不断进行产能扩张和自动化升级。公司引进了国际先进的生产设备和技术,提高了生产效率和产品质量。同时,公司还加大了对自动化设备的投入,减少了人力成本,提高了生产效率。这些措施不仅提升了公司的竞争力,也为公司的长远发展奠定了基础。

Cadeka公司的发展小趣事

随着电子行业的快速发展,Cadeka公司意识到单一市场的局限性。为了拓展业务,公司开始实施全球化战略布局。首先,Cadeka在欧洲和亚洲设立了研发中心,与当地高校和研究机构合作,共同开发新技术。同时,公司还在全球范围内建立了生产基地和销售网络,以便更好地服务全球客户。

ABCircuits公司的发展小趣事

随着公司的不断发展,ABCircuits意识到单打独斗难以应对日益激烈的市场竞争。于是,公司开始积极寻求与其他企业的战略合作。通过与上下游企业的紧密合作,ABCircuits不仅获得了稳定的供应链支持,还成功打开了国际市场的大门。这些合作不仅加速了公司的扩张步伐,也提升了其品牌影响力和市场竞争力。

Davies Molding公司的发展小趣事

随着电子行业的快速发展,Davies Molding公司意识到,只有不断创新,才能在市场上保持领先地位。因此,公司积极引进先进的生产技术和设备,不断提升自身的研发能力。通过不断的技术创新,Davies Molding公司成功推出了一系列具有竞争力的新产品,满足了市场对高品质塑料注塑成型产品的需求。

川土(Chipanalog)公司的发展小趣事

2022年,川土微电子的CA-IS3062W产品荣获了中国IC设计成就奖之“年度最佳隔离器”。这一荣誉的获得不仅是对川土微电子技术实力的肯定,也进一步提升了公司在行业内的知名度。同时,这也为川土微电子未来的发展奠定了坚实的基础。

问答坊 | AI 解惑

详谈如何“轻松”的开发和应用Zigbee

一、 突破ZigBee应用系统设计的瓶颈 对于一个实际ZIGBEE应用系统的设计,设计者主要面对的技术难点有三个,通讯距离,高频设计技术和无线软件技术,这也是ZigBee技术走向应用的主要瓶颈。 1、通讯距离问题,由于一般的ZigBee前端RF部 ...…

查看全部问答>

奥迪采用车载电子设备新技术 汽车可避开红灯

德国大众旗下奥迪(Audi)进一步扩大了Travolution车载电子系统的测试范围,并在15辆测试汽车和25处红绿灯上安装了该系统,以帮助车辆避开红灯。安装Travolution系统后,当汽车行驶至红绿灯时,就会收到交通灯发射的信号,Travolution系统便根据此 ...…

查看全部问答>

招聘兼职 STM32项目

负责STM32 AD部分数据采集然后通过USB传送到pc. 2009-06-16 -------------------------------------------------------------------------------- 广州日普电子有限公司 梁先生 广州科学城玉树工业区H栋东座3楼 电话:020-82260121 传真:020 ...…

查看全部问答>

有没有4路16位A/D转换芯片?

有没有4路16位A/D转换芯片?请问哪款性价比好点?…

查看全部问答>

U盘插拔式的wince终端

新买了款终端机,和以前用的很不一样。在样机上做的程序也不能跑。有很多问题请教: 1。不能实现和activesync同步,插上数据线,就像U盘一样,只显示ce里面的flash disk。 2。不能安装netcf,不能识别。查看系统是wince5.0的,处理器类型是Inge ...…

查看全部问答>

KEIL C代码加密

大家好,我有个问题想请教,我的是嵌入式系统,KEIL C代码,怎么加密代码呢,可否提示一下!…

查看全部问答>

侃侃我的成果

本人长期从事单片机开发应用,积累了一定的经验。本人将毕生研究心得集成了文字,放在我的博客里,希望大家光临指导,并给点意见。我的博客地址;http://blog.mcuol.com/user/Article/500.html…

查看全部问答>

ADS下compile说头文件找不到这是为啥?

/**************************************************************** NAME: u2440mon.c DESC: u2440mon entry point,menu,download ****************************************************************/#define GLOBAL_CLK&nb ...…

查看全部问答>

【为C2000做贡献】基于TMS320F2812的DSP最小系统设计

摘 要:在电子信息专业的课程教学、综合实验教学、毕业设计以及电子设计竞赛中,需要应用DSP 实验系统。本文以性价比高、在工业上广泛应用的TMS320F2812 为主控芯片,设计了一个DSP 最小应用系统。详细介绍了各部分电路的设计方法和调试过程。该 ...…

查看全部问答>

新人刚开始学51单片机

刚开始学单片机,经同学介绍来此论坛学习知识,希望大家能指点一下,我们现在在学51,不知道大家对51的学习有什么建议没呢 …

查看全部问答>