STM32F429之USART管脚复用

发布者:静逸心境最新更新时间:2019-05-29 来源: eefocus关键字: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引脚


/**

  ******************************************************************************

  * @file    bsp_usart.c

  * @author  fire

  * @version V1.0

  * @date    2015-xx-xx

  * @brief   Öض¨Ïòc¿âprintfº¯Êýµ½usart¶Ë¿Ú

  ******************************************************************************

  * @attention

  *

  * ʵÑéƽ̨:±ü»ð  STM32 F429 ¿ª·¢°å  

  * ÂÛ̳    :http://www.firebbs.cn

  * ÌÔ±¦    :http://firestm32.taobao.com

  *

  ******************************************************************************

  */ 

  

#include "./usart/bsp_usart.h"

 

 

 /**

  * @brief  USART GPIO ÅäÖÃ,¹¤×÷ģʽÅäÖá£115200 8-N-1 

  * @param  ÎÞ

  * @retval ÎÞ

  */

void USARTx_Config(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  RCC_AHB1PeriphClockCmd(USARTx_RX_GPIO_CLK|USARTx_TX_GPIO_CLK,ENABLE);

 

  /* ʹÄÜ USART ʱÖÓ */

  USARTx_CLOCKCMD(USARTx_CLK, 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 =  USARTx_TX_PIN  ;  

  GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure);

 

  /* ÅäÖÃRxÒý½ÅΪ¸´Óù¦ÄÜ */

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Pin =  USARTx_RX_PIN;

  GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure);

  

 /* Á¬½Ó PXx µ½ USARTx_Tx*/

  GPIO_PinAFConfig(USARTx_RX_GPIO_PORT,USARTx_RX_SOURCE,USARTx_RX_AF);

 

  /*  Á¬½Ó PXx µ½ USARTx__Rx*/

  GPIO_PinAFConfig(USARTx_TX_GPIO_PORT,USARTx_TX_SOURCE,USARTx_TX_AF);

  

  /* ÅäÖô®DEBUG_USART ģʽ */

  /* ²¨ÌØÂÊÉèÖãºDEBUG_USART_BAUDRATE */

  USART_InitStructure.USART_BaudRate = USARTx_BAUDRATE;

  /* ×Ö³¤(Êý¾Ýλ+УÑéλ)£º8 */

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  /* ֹͣλ£º1¸öֹͣλ */

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  /* УÑéλѡÔñ£ºÅ¼Ð£Ñé */  

USART_InitStructure.USART_Parity = USART_Parity_No;

  /* Ó²¼þÁ÷¿ØÖÆ£º²»Ê¹ÓÃÓ²¼þÁ÷ */

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  /* USARTģʽ¿ØÖÆ£ºÍ¬Ê±Ê¹ÄܽÓÊպͷ¢ËÍ */

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* Íê³ÉUSART³õʼ»¯ÅäÖà */

  USART_Init(USARTx, &USART_InitStructure); 

  /* ʹÄÜ´®¿Ú */

  USART_Cmd(USARTx, ENABLE);

}

 

///Öض¨Ïòc¿âº¯Êýprintfµ½´®¿Ú£¬Öض¨Ïòºó¿ÉʹÓÃprintfº¯Êý

int fputc(int ch, FILE *f)

{

/* ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ýµ½´®¿Ú */

USART_SendData(USARTx, (uint8_t) ch);

/* µÈ´ý·¢ËÍÍê±Ï */

while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);

return (ch);

}

 

///Öض¨Ïòc¿âº¯Êýscanfµ½´®¿Ú£¬ÖØдÏòºó¿ÉʹÓÃscanf¡¢getcharµÈº¯Êý

int fgetc(FILE *f)

{

/* µÈ´ý´®¿ÚÊäÈëÊý¾Ý */

while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);

 

return (int)USART_ReceiveData(USARTx);

}

 

/*********************************************END OF FILE**********************/



关键字:STM32F429  USART  管脚复用 引用地址:STM32F429之USART管脚复用

上一篇:STM32 ISP下载模式和JLINK下载模式
下一篇:stm32f429引脚复用

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

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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