历史上的今天
返回首页

历史上的今天

今天是:2025年01月17日(星期五)

正在发生

2019年01月17日 | STM32:STM32学习记录4:串口

2019-01-17 来源:eefocus

配置流程:


1:系统时钟初始化,包括系统时钟和要开放的IO口和串口的时钟配置,要打开串口的时钟!!!


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);。


2:IO口初始化,包括引脚,速率,输入输出模式等。


3:配置USART的波特率,数据位等。


4:串口的初始化包括两部分。一部分是串口使用的IO口初始化调用GPIO_Init(),另一部分是串口功能的初始化调用USART_Init(),同样注意结构体数据类型的定义。


注意:

1:USART的IO口也需要配置   

配置流程如下:

 //USART1 IO初始化  GPIOA9 TX

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//引脚选择

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出  注意此处为复用推挽输出

    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化


    //USART1 IO初始化  GPIOA10 RX

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//引脚选择

//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率    注意RX不用配置速率!!(不知道原因)

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入 注意此处为浮空输入

    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

2:两次发送时间间隔不能太长,如果太长就会出现只收到前两位数据的情况!!!!!!!!!!!!!!!!!!


程序如下:

#include"stm32f10x.h"

 

 

#define LED0_ON  GPIO_SetBits(GPIOA,GPIO_Pin_8)    // LED0开

#define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0关

 

 

//初始化IO端口

void IO_Configuart(void)   

{

    GPIO_InitTypeDef GPIO_InitStructure;//定义 GPIO_InitStructure为    GPIO_InitTypeDef结构体类型

    //LED指示灯初始化,闪说明系统运行

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引脚选择

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

 

    //USART1 IO初始化  GPIOA9 TX

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//引脚选择

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出

    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

 

    //USART1 IO初始化  GPIOA10 RX

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//引脚选择

//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//推挽输出

    GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

 

 

//    //配置GPIOD_2

//    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//引脚选择

//    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率

//    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

//    GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化

}

 

//复位和系统时钟控制

void RCC_Configuare(void)

{    

    SystemInit();//频率设定有system_stm32f10x.c文件中的宏定义 开放某个宏 当调用SystemInit()时即可设置好频率

    RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能时钟安全系统

 

    //使能GPIOA,GPIOD端口时钟  USART1时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);

//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//允许总线CLOCK,在使用GPIO之前必须允许相应的端口时钟

    /*    也可以写为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);   更加简洁*/

}

 

//NVIC设置

void NVIC_Configuare(void)

{

    NVIC_InitTypeDef   NVIC_InitStructure;

    NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);//设定中断向量表基址0x08000000

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 先占优先级0位  从优先级4位

 

//    //使能KEY0,KEY1中断

//    NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//外部中断线15-10中断  由于两个按键是PA13 PA15由外部中断IO映射得知

//    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x0F;    //先占优先级0位,从优先级4位

//    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x0F;         //

//    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

//    NVIC_Init(&NVIC_InitStructure);

//    //使能WK_UP中断

//    NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;//外部中断线0中断  WK_UP按键 接PA0

//    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;    //先占优先级0位,从优先级4位

//    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;         //

//    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

//    NVIC_Init(&NVIC_InitStructure);

}

 

void USART_Configuare(void)

{

    USART_InitTypeDef USART_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_Tx | USART_Mode_Rx; //收发模式

    USART_Init(USART1, &USART_InitStructure); 

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

}

 

void Delay(u16 speed)

{

    u16 i=0;

    while(speed!=0)

    {

        speed--;

        for(i=0;i<400;i++);

    }

}

int main(void)

{

    u8 Buffer;

    RCC_Configuare();

    IO_Configuart() ;

    NVIC_Configuare();

    USART_Configuare();

    while(1)

    {

        while(USART_GetFlagStatus (USART1,USART_FLAG_RXNE)==RESET); //    接收数据寄存器非空标志位 

        Buffer=USART_ReceiveData(USART1);//返回 USARTx 最近接收到的数据 

//        Delay(20);     此处不能延时时间太长!!!!!!!!!!!!

        USART_SendData(USART1,Buffer);    // 通过外设 USARTx 发送单个数据 

        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);    // 发送数据寄存器空标志位 

    }

}


推荐阅读

史海拾趣

康龙(CONCRAFT)公司的发展小趣事

作为一家有社会责任感的企业,康龙公司始终关注环境保护和可持续发展。公司积极采用环保材料和生产工艺,减少生产过程中的污染和浪费。同时,康龙还积极参与社会公益事业和慈善活动,回馈社会。这些举措不仅提升了公司的品牌形象和社会声誉,也为公司的长远发展注入了正能量。

爱浦电子(AIPULNION)公司的发展小趣事

为了更好地服务客户,爱浦电子不断完善服务体系,提升服务水平。公司建立了全国性的服务网点,覆盖30多个城市,能够为客户提供及时、专业的技术支持和售后服务。此外,爱浦电子还根据客户需求,提供个性化定制服务,满足不同行业对模块电源的多样化需求。这些举措赢得了客户的广泛赞誉和信任,进一步巩固了公司在市场上的地位。

Codeco Corporation Of Vermont公司的发展小趣事

随着电子行业的快速发展和变革,Codeco面临着新的挑战和机遇。为了应对这些变革,公司及时调整战略,加大在人工智能、物联网等领域的投入。通过与高校、研究机构的合作,Codeco不断吸收新的技术和理念,推出了一系列符合市场需求的创新产品。这些举措使得Codeco在行业中保持了领先地位。

Ford Aerospace & Communications Corp公司的发展小趣事

在20世纪20年代,亨利·福特不仅专注于汽车制造业,还展现了对航空技术的浓厚兴趣。他资助了威廉·布什纳尔·斯道特(Willam Bushnell Stout)的飞机研发项目,这标志着福特向航空领域的初步探索。斯道特设计的福特三发飞机(后被称为“铁皮鹅”)虽未直接成为商业成功的典范,但它为福特汽车公司积累了宝贵的航空技术经验,也为后续可能的航空通信项目奠定了基础。

圣邦微电子(Fangtek)公司的发展小趣事

进入20世纪50年代,随着太空技术的兴起,福特汽车公司开始关注卫星通信的潜力。虽然福特并未直接参与卫星的发射或制造,但它通过资助相关科研机构和大学的研究项目,间接推动了卫星通信技术的发展。这些研究为后来的全球卫星通信系统提供了重要的理论基础和技术支持。

Coherent Inc公司的发展小趣事

尽管电子行业竞争激烈,市场变化莫测,但Coherent Inc.始终保持着坚定的前行步伐。公司不断适应市场变化,调整战略方向,积极应对各种挑战。同时,公司也注重与合作伙伴的紧密合作,共同推动激光技术的创新和应用。这种坚定前行的态度,使得Coherent Inc.在电子行业中始终保持着领先的地位。

这五个故事只是Coherent Inc.发展历程中的一部分,但它们足以展示公司在电子行业中的崛起和发展。通过不断的探索、创新、收购与整合,以及坚定的前行态度,Coherent Inc.已经成为了激光技术领域的佼佼者,为电子行业的发展做出了重要贡献。

问答坊 | AI 解惑

电子设计大赛题目征集

本帖最后由 paulhyde 于 2014-9-15 09:31 编辑 各位大虾能帮着想一些电子设计大赛的题目吗?主要针对单片机控制类的,不甚感激,  …

查看全部问答>

Msp430F449时钟各模块运用例程

Msp430F449各种模块运用例程,包含了:Basictimer,Timer_A,Timer_B,ADC12,时钟模块FLL+操作,…

查看全部问答>

wince下如何编译armv6的程序

使用ce6.0,平台cpu是armv6指令集的。 vs2005的工程设置中只有armv4和armv5,怎么编armv6的应用? 或者vs2008可以编armv6吗…

查看全部问答>

广州招聘 嵌入式开发人员 重分找顶!!

名称:广州市百家汇技术研发中心 地址:广州市天河区 简介:本中心是集软件系统、单片机、模型等设计和开发为一体的研发机构。公司拥有多名技术过硬的高级工程师。并且与北京航天航空大学进行学术联盟,各种新技术都在这里不断的产生和应用。公司 ...…

查看全部问答>

WinCE ping 的问题

定制了一个CE6.0的映像,从设备可以ping 主机,但是从主机不能够ping到设备, 如果换一个ce5.0,则没有问题,请问是定制时哪方面的问题?…

查看全部问答>

Operational amplifier gain stability Part 1 General system analysis

本帖最后由 dontium 于 2015-1-23 13:38 编辑  Operational amplifier gain stability Part 1 General system analysis …

查看全部问答>

有关三极管饱和区间的疑问

1、深度饱和是不是三极管介于截止区和饱和区的临界点? 2、深度饱和Uce是不是一定为0.3V?还是不同的管子有不同的值。 3、当Ube大于开启电压,Uce小于0.3V(或深度饱和电压)时,三极管处于什么样的工作状态?…

查看全部问答>

国行iPhone4S拆机——内部构造详解

一部iPhone4s国行16GB就这样牺牲了,掉海里了,主板全烧,我来发挥下它最后的价值。拆了吧!以前拆了就扔了,这次我想拆了再装回去。 工具 卸下电池螺丝,就可以把插口拔出来,电池就下来了 本人是新手,所以只能用这个方法不让零件遗失,WIFI模 ...…

查看全部问答>

【MXCHIP Open1081】哪有可用的IAR工程???

本帖最后由 dontium 于 2014-11-17 21:53 编辑 打开官方提供的IAR工程,好多文件,特别是关键文件不存在。 如上图中,只有system_smt32f2xx.c及startup_stm32f2xx.s能打开,其它的都不存在! 更可恶的是,项目中指定的一个关键文件 ---- mxch ...…

查看全部问答>

电感的区别

请问这两种电感有什么区别么?仅仅是封装不同么?分别用在什么场合…

查看全部问答>