美文网首页
STM32学习教程<二> USART串口发送数据

STM32学习教程<二> USART串口发送数据

作者: 七面琅琊 | 来源:发表于2017-12-06 23:36 被阅读0次

    m_<:整个程序除去基本配置外由两部分组成,main.c与bsp_usart.c。其中,bsp_usart.c及.h负责外设USART寄存器的配置,使其能正常工作。main.c则是在USART配置完能正常操作后来实现USART怎么发送数据。

    1 main.c

    #include "stm32f4xx.h"
    #include "./led/bsp_led.h"   //采用相对路径可不在魔法棒中添加Include Paths
    #include "./usart/bsp_usart.h"
    
    int main(void)
    {
        USART_Config();   //核心bsp_usart.c中配置USART
        Usart_SendByte(USART1, 'A');   //发送一个Byte
        Usart_SendByte(USART1, '\n');   //发送换行符
        Usart_SendString(USART1, "你好,STM320F407!");   //发送一个字符串 
        while (1)
        {}
    }
    

    2.1 bsp_usart.h

    #ifndef __BSP_USART_H
    #define __BSP_USART_H
    
    #include "stm32f4xx.h"
    
    void USART_Config(void);  //配置USART
    void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t ch);  //发送单个字符
    void Usart_SendString(USART_TypeDef * pUSARTx, char *str);  //发送字符串
    #endif
    

    2.2 bsp_usart.c

    #include "./usart/bsp_usart.h"
    /***************** 配置USART寄存器 **********************/
    void USART_Config(void)
    {
      /* 第一步:初始化GPIO */
      GPIO_InitTypeDef GPIO_InitStructure;   //TX与PA9相连,通过PA9发数,因此GPIO口也要配置
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);   //使能GPIO时钟
      GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      /* 配置Tx引脚为复用功能  */
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   //选择复用模式
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  //选择复用的引脚     
      GPIO_Init(GPIOA, &GPIO_InitStructure);   //初始化GPIO
      GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);   //将PA9复用到USART1上
      /* 第二步:配置串口初始化结构体 */
      USART_InitTypeDef USART_InitStructure;   //定义一个USART结构体
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);   //使能USART时钟
      /* 配置串口USART1模式 */
      USART_InitStructure.USART_BaudRate = 115200;   //波特率
      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_Init(USART1, &USART_InitStructure);   //初始化USART
      /* 第三步:使能串口 */
      USART_Cmd(USART1, ENABLE);
    }
    /***************** 发送一个字符 **********************/
    void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t ch)
    {
      USART_SendData(pUSARTx, ch);   //由TDR(数据发送寄存器)发送一个字节到数据移位寄存器
      while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);   //判断TDR是否为空,发送完TXE位置1 
      {}
    }
    /***************** 发送字符串 **********************/
    void Usart_SendString(USART_TypeDef * pUSARTx, char *str)   //str理解为char[]首地址
    {
      unsigned int k=0;
      do 
      {
        Usart_SendByte(pUSARTx, *(str + k));
        k++;
      }while(*(str + k) != '\0');   //字符串以\0结尾
      /* 等待发送完成 */
      while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET)   //判断所有数据是否发送完,发送完TC位置1
      {}
    }
    
    发送数据

    说明:收发数据一起写有点复杂,拆开写容易懂,下节写数据接收。尽量把排版和注释做好,方便阅读。

    相关文章

      网友评论

          本文标题:STM32学习教程<二> USART串口发送数据

          本文链接:https://www.haomeiwen.com/subject/xkfrixtx.html