历史上的今天

今天是:2024年09月01日(星期日)

正在发生

2018年09月01日 | STM32库函数实现USART发送数据

发布者:Whisper123 来源: eefocus关键字:STM32  库函数  USART  发送数据 手机看文章 扫描二维码
随时随地手机看文章

参考文件:STM32固件库使用手册的中文翻译版.pdf 
如图1 
这里写图片描述

  1. 我们先把USART初始化函数添加到主函数,如图二 
    包括Baudrate,Word Length,Stop Bit,Parity,Hardware Flow Control(硬件流控制),Usart Mode; 
    这里写图片描述

  2. UE使能,使能串口外设,如图3 
    这里写图片描述
    3.串口初始化,串口外设使能之后,就要发送数据了如图4; 
    这里写图片描述
    4.发送完成标志位函数,如图5; 
    这里写图片描述

程序1 实现功能代码如下

/************************************************

 刘凯教你学STM32F103

 第20讲

 软件仿真,库函数实现USART数据发送

 2016年4月24日 10:12:39

 程序实现1 

**************************************************/

#include "sys.h"

#include "delay.h"



void RCC_Configuration(void);

void GPIO_Configuration(void);


int main(void)

{

    u8 i,data;

    USART_InitTypeDef USART_InitStructure;          


    RCC_Configuration();

    GPIO_Configuration();



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


    data = 'A';

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

    {

        USART_SendData(USART1, data);

        data++;

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

    }

}


void RCC_Configuration(void)

{

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

        RCC_DeInit();           //设置时钟为缺省值

        RCC_HSEConfig(RCC_HSE_ON);  //使能外部高速晶振

        while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待HSE准备就绪


        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能指令预取

        FLASH_SetLatency(FLASH_Latency_2);                      //等待2个周期


        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 = 72MHZ

        RCC_PLLCmd(ENABLE);                                 //Enable PLLCLK

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


       RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);         //SYSCLK = PLLCLK

       while(RCC_GetSYSCLKSource()!= 0x08);                   //Wait PLLCLK as system clock 



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

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

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);    

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);     


void GPIO_Configuration(void)

{

    GPIO_InitTypeDef    GPIO_InitStructure;     //声明一个结构体变量

    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);                //初始化GPIOA寄存器


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //选择

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    

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


对上面代码进行优化


/************************************************

 刘凯教你学STM32F103

 第20讲

 软件仿真,库函数实现USART数据发送

 2016年4月24日 10:12:39

 程序实现2 对程序1进行优化

**************************************************/

#include "sys.h"

#include "delay.h"



void RCC_Configuration(void);

void GPIO_Configuration(void);

void USART_Configuration(u32 Baudrate);


int main(void)

{

    u8 i,data;



    RCC_Configuration();

    GPIO_Configuration();

    USART_Configuration(9600);

    data = 'A';

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

    {

        USART_SendData(USART1, data);

        data++;

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

    }

}


void RCC_Configuration(void)

{

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

        RCC_DeInit();           //设置时钟为缺省值

        RCC_HSEConfig(RCC_HSE_ON);  //使能外部高速晶振

        while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待HSE准备就绪


        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能指令预取

        FLASH_SetLatency(FLASH_Latency_2);                      //等待2个周期


        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 = 72MHZ

        RCC_PLLCmd(ENABLE);                                 //Enable PLLCLK

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


       RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);         //SYSCLK = PLLCLK

       while(RCC_GetSYSCLKSource()!= 0x08);                   //Wait PLLCLK as system clock 



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

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

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);    

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);     


void GPIO_Configuration(void)

{

    GPIO_InitTypeDef    GPIO_InitStructure;     //声明一个结构体变量

    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);                //初始化GPIOA寄存器


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //选择

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    

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


void USART_Configuration(u32 Baudrate)

{

    USART_InitTypeDef USART_InitStructure; 

    USART_InitStructure.USART_BaudRate = Baudrate;      

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

}


关键字:STM32  库函数  USART  发送数据 引用地址:STM32库函数实现USART发送数据

上一篇:stm32发送16进制的数组总结
下一篇:stm32使用两路串口及接收不定长数据的实现

推荐阅读

一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①HSI是高速内部时钟,RC振荡器,频率为8MHz。②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或...
近日,印度研究人员宣布开发出一种可充电的铁离子电池,它以低碳钢为阳极,具备性价比高、可储存电量高等优势。相关研究成果近期发表在英国皇家化学会期刊《化学通讯》上。论文说,印度理工学院马德拉斯分院研究团队研发的这种铁离子电池,以低碳钢为阳极,五氧化二钒为阴极,电解液为含高氯酸铁的醚基电解液。研究显示,这种电池可进行150次循环充放电,...
近日,在兆易创新成立15年之际,2020兆易创新全国巡回研讨会-北京站召开,研讨会围绕“兆存储 易控制 新传感”这一主题,揭秘了兆易创新的Flash存储器、32位通用型MCU及智能人机交互传感器芯片等产品的发展历程、产品优势、未来规划等。兆易创新的产品一直以来以高性能、低功耗著称,为工业、汽车、计算、消费类电子、物联网移动以及网络、电信行业的客...
用于真正的重型设备:儒卓力提供威世981 HE精密电位计产品系列即使在恶劣环境中也能够保持可靠和精确:威世981 HE 系列精密电位计采用非接触式霍尔效应技术运行,非常耐用并能够承受高振动。威世提供空心轴或D轴以及弹簧加载型款,具有高达±0.5%的精确线性度以及出色的重复性能。得益于先进的霍尔效应技术,981 HE 系列传感器能够在最高20 G的高频...

史海拾趣

问答坊 | AI 解惑

12864的一些程序

本帖最后由 paulhyde 于 2014-9-15 04:18 编辑 1.关于汉字库的 2.驱动  …

查看全部问答∨

什么是 802.11 802.11a 802.11b 802.11g 标准

  802.11  802.11是IEEE最初制定的一个无线局域网标准,主要用于解决办公室局域网和校园网中用户与用户终端的无线接入,业务主要限于数据存取,速率最高只能达到2Mbps。由于它在速率和传输距离上都不能满足人们的需要,因此,IEEE小组又相继推 ...…

查看全部问答∨

请教一个multisim10仿真问题?

在用multisim10仿真的时候,对于没有的器件该怎么办?比如我要仿真OP07的一个电路,但是我在multisim10里找不到OP07,那我该怎么办呢,可以创建一个吗?…

查看全部问答∨

有WinCE下UDP通信成功的吗?

我一个Wince终端的UDP通信,发送数据到一个服务器,服务器接收不到数据,如果用Wince终端自己做服务器,就可以接收到,不知道什么问题,我用USB线连到电脑联网通信可以吗,但是在WinCE终端上是ping不通的?…

查看全部问答∨

请教NANDflash的读写格式

     请问一下,当NAND进行读写操作的时候,由于是以页为单位,如果我操作的首地址并不是页首地址,      1:那应该如何操作?(例如一页有512Byte,操作首地址是第100字节)那我应该从100开始,一直读写 ...…

查看全部问答∨

帮忙推荐一款较易开发的短信收发模块

短信收发模块采用单片机控制.功能只需要中英文短信收发即可.谢谢 …

查看全部问答∨

理解线性电源的原理

理解线性电源的原理…

查看全部问答∨

倒塌,数据手册不同

两份datasheet的pin描述居然不一样。 我手上一份datasheet,页眉上是STM32F101x4,STM32F101x6,对于PB10,PB11的描述Remap 到TIM2_CH3,TIM2_CH4;我同事手上一份datasheet,页眉上是STM32F101x6,STM32F101x8,STM32F101xB,却没有标明有这 ...…

查看全部问答∨

1602无法显示(对比度正常)

以下是我的程序,编译连接能通过,也能生成hex文件,就是不能显示,不知道是什么问题。望高手求救! /**************************************************************************************file name      &nb ...…

查看全部问答∨

FPGA的最大灌电流是多少

请问EP2C8Q208   最大允许灌电流是多少啊…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved