STM32F429之USART管脚复用

在f429中   

      USART1串口1  tx/rx PA9 PA10     串口1、6 APB2时钟

USART2串口2  PA2 PA3           串口2、3、4、5、7 APB1时钟


什么叫管脚复用

STM32F4有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。

以USART2为例TX,RX分别对应PD5,PD6

1.时钟使能

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOD,ENABLE);

  USARTx_CLOCKCMD(RCC_APB2Periph_USART1, ENABLE);使能USART时钟

   2.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_5  ;  

  GPIO_Init(GPIOD, &GPIO_InitStructure);

配置RX复用功能

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;

  GPIO_Init(GPIOD, &GPIO_InitStructure);

连接TX、RX到USART

  GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,USARTx_RX_AF);

  GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,USARTx_TX_AF);

3.USART配置
  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_Rx | USART_Mode_Tx;  USART控制模式同时使用接收和发送

  USART_Init(USARTx, &USART_InitStructure);   写入
    

  USART_Cmd(USARTx, ENABLE);  使能串口

}

具体程序如下A9,A10引脚

[cpp]  view plain  copy
  1. /** 
  2.   ****************************************************************************** 
  3.   * @file    bsp_usart.c 
  4.   * @author  fire 
  5.   * @version V1.0 
  6.   * @date    2015-xx-xx 
  7.   * @brief   Öض¨Ïòc¿âprintfº¯Êýµ½usart¶Ë¿Ú 
  8.   ****************************************************************************** 
  9.   * @attention 
  10.   * 
  11.   * ÊµÑéƽ̨:±ü»ð  STM32 F429 ¿ª·¢°å   
  12.   * ÂÛ̳    :http://www.firebbs.cn 
  13.   * ÌÔ±¦    :http://firestm32.taobao.com 
  14.   * 
  15.   ****************************************************************************** 
  16.   */   
  17.     
  18. #include "./usart/bsp_usart.h"  
  19.   
  20.   
  21.  /** 
  22.   * @brief  USART GPIO ÅäÖÃ,¹¤×÷ģʽÅäÖá£115200 8-N-1  
  23.   * @param  ÎÞ 
  24.   * @retval ÎÞ 
  25.   */  
  26. void USARTx_Config(void)  
  27. {  
  28.   GPIO_InitTypeDef GPIO_InitStructure;  
  29.   USART_InitTypeDef USART_InitStructure;  
  30.           
  31.   RCC_AHB1PeriphClockCmd(USARTx_RX_GPIO_CLK|USARTx_TX_GPIO_CLK,ENABLE);  
  32.   
  33.   /* Ê¹ÄÜ USART Ê±ÖÓ */  
  34.   USARTx_CLOCKCMD(USARTx_CLK, ENABLE);  
  35.     
  36.   /* GPIO³õʼ»¯ */  
  37.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  
  38.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;    
  39.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  40.     
  41.   /* ÅäÖÃTxÒý½ÅΪ¸´Óù¦ÄÜ  */  
  42.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
  43.   GPIO_InitStructure.GPIO_Pin =  USARTx_TX_PIN  ;    
  44.   GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure);  
  45.   
  46.   /* ÅäÖÃRxÒý½ÅΪ¸´Óù¦ÄÜ */  
  47.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
  48.   GPIO_InitStructure.GPIO_Pin =  USARTx_RX_PIN;  
  49.   GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure);  
  50.     
  51.  /* Á¬½Ó PXx µ½ USARTx_Tx*/  
  52.   GPIO_PinAFConfig(USARTx_RX_GPIO_PORT,USARTx_RX_SOURCE,USARTx_RX_AF);  
  53.   
  54.   /*  Á¬½Ó PXx µ½ USARTx__Rx*/  
  55.   GPIO_PinAFConfig(USARTx_TX_GPIO_PORT,USARTx_TX_SOURCE,USARTx_TX_AF);  
  56.     
  57.   /* ÅäÖô®DEBUG_USART Ä£Ê½ */  
  58.   /* ²¨ÌØÂÊÉèÖãºDEBUG_USART_BAUDRATE */  
  59.   USART_InitStructure.USART_BaudRate = USARTx_BAUDRATE;  
  60.   /* ×Ö³¤(Êý¾Ýλ+УÑéλ)£º8 */  
  61.   USART_InitStructure.USART_WordLength = USART_WordLength_8b;     
  62.   /* Í£Ö¹Î»£º1¸öֹͣλ */  
  63.   USART_InitStructure.USART_StopBits = USART_StopBits_1;  
  64.   /* Ð£ÑéλѡÔñ£ºÅ¼Ð£Ñé */    
  65.     USART_InitStructure.USART_Parity = USART_Parity_No;  
  66.   /* Ó²¼þÁ÷¿ØÖÆ£º²»Ê¹ÓÃÓ²¼þÁ÷ */  
  67.   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
  68.   /* USARTģʽ¿ØÖÆ£ºÍ¬Ê±Ê¹ÄܽÓÊպͷ¢ËÍ */  
  69.   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
  70.   /* Íê³ÉUSART³õʼ»¯ÅäÖà*/  
  71.   USART_Init(USARTx, &USART_InitStructure);   
  72.       
  73.   /* Ê¹ÄÜ´®¿Ú */  
  74.   USART_Cmd(USARTx, ENABLE);  
  75. }  
  76.   
  77. ///Öض¨Ïòc¿âº¯Êýprintfµ½´®¿Ú£¬Öض¨Ïòºó¿ÉʹÓÃprintfº¯Êý  
  78. int fputc(int ch, FILE *f)  
  79. {  
  80.         /* ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ýµ½´®¿Ú */  
  81.         USART_SendData(USARTx, (uint8_t) ch);  
  82.           
  83.         /* µÈ´ý·¢ËÍÍê±Ï */  
  84.         while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);         
  85.       
  86.         return (ch);  
  87. }  
  88.   
  89. ///Öض¨Ïòc¿âº¯Êýscanfµ½´®¿Ú£¬ÖØдÏòºó¿ÉʹÓÃscanf¡¢getcharµÈº¯Êý  
  90. int fgetc(FILE *f)  
  91. {  
  92.         /* µÈ´ý´®¿ÚÊäÈëÊý¾Ý */  
  93.         while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);  
  94.   
  95.         return (int)USART_ReceiveData(USARTx);  
  96. }  
  97.   
  98. /*********************************************END OF FILE**********************/  

猜你喜欢

转载自blog.csdn.net/duidaifen3896/article/details/79572156
今日推荐