STM32串口通信实验-库函数

发布者:RainbowMelody最新更新时间:2019-06-24 来源: eefocus关键字:STM32  串口通信  库函数 手机看文章 扫描二维码
随时随地手机看文章

这里先给出程序源码:

 

调用库函数:

#include "sys.h"

#include "usart.h"

#include "led.h"

#include "delay.h"


int main()

{

  u8 i;

  u8 len;

  u32 times = 0;

  //中断分组

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  //初始化延时函数

  delay_init(84);

  //初始化串口

  uart_init(115200);

  //初始化led

  LED_Init();

  //循环

  LED0 = 0;

  while (1)

  {

    //检验接受标志

    //若接收到

    if (USART_RX_STA & 0x8000) //位15判定是否接收到数据

    {

      //确定接受信息的长度

      len = USART_RX_STA & 0x3fff; //位0到位14与1位与

      //输出提示信息

      printf("rn您发送的消息为:rn");

      //接受信息并串口输出

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

        USART_SendData(USART1, USART_RX_BUF[i]); //使用库函数SendData向串口1发送数据

        //直到接收结束为止

        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET); //使用库函数检验发送是否接受完成

      }

      printf("rnrn");

      //检验标志复位

      USART_RX_STA = 0;

    }

    //没有接收到

    else 

    {

      times++;

      if (times % 30 ==0) LED0 = !LED0;

      if (times % 500 == 0) printf("rn请输入要输出的内容rn");

      if (times % 3000 == 0) printf("rn年轻人啊!身残志坚。rn");


      //延时

      delay_ms(10);

    }


  }

}

 


使用寄存器


#include "stm32f4xx.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

#include "beep.h"

#include "sys.h"



int main(void)

{

  u8 i; //循环计数位

  u8 len;

  u32 times;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为2

uart_init(115200); //串口初始化波特率设置为115200

delay_init(84); //延时初始化

  led_init();

  //GPIO_ResetBits(GPIOF, GPIO_Pin_9); //点亮红灯


  while (1){

    if (USART_RX_STA & 0x8000) //USART_RX_STA位15(第16位)为接收完成标志,其作用在于判定是否接收完成

    { 

      len = USART_RX_STA & 0x3fff; //得到此次收到的数据长度

      printf("rn您发送的消息为:rn");

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

        USART1->DR = USART_RX_BUF[i];

        while ((USART1->SR & 0x40) == 0); //USART1->SR位6为发送完成位,具体寄存器相关配置参考文档《stm32f4xx中文参考手册》

      }

      printf("rnrn");

      USART_RX_STA = 0;

    } else 

    {

      times++;

      if (times % 5000 == 0) {

        printf("rnALIENTEK 探索者STM32F407开发板 串口实验rn");

printf("正点原子@ALIENTEKrnrnrn");

      }

      if (times % 200 == 0) printf("请输入数据,以回车键结束rn");

      if (times % 30 == 0) LED0 = !LED0;//led闪烁提示正在运行程序

      delay_ms(10);

    }


}

}

 


正确的输出结果应该是这样的(以库函数版本为例):


同时红色LED显示灯不停闪烁。 


关键字:STM32  串口通信  库函数 引用地址:STM32串口通信实验-库函数

上一篇:STM32PWM实现呼吸灯-库函数
下一篇:STM32键盘-库函数

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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