在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**********************/
上一篇:STM32 ISP下载模式和JLINK下载模式
下一篇:stm32f429引脚复用
设计资源 培训 开发板 精华推荐
- 用于服务器的 3.3V DC 到 DC 单路输出电源
- LT1021DCN8-10 用于处理更高负载电流的电压基准的典型应用
- 使用 ON Semiconductor 的 SR10010 的参考设计
- LTC3615MPUF-1 双路 3A 同步降压型 DC/DC 转换器在主机和从机中的典型应用,用于使用 2MHz 外部时钟实现一致跟踪输出
- FUSB340 USB-3.1 SuperSpeed 10 Gbps 开关的典型应用
- EVAL-AD4000FMCZ,用于评估 AD4000 系列 16 位精密 SAR ADC 的评估板
- 模电2.0
- 使用 NXP Semiconductors 的 TDA8933BT 的参考设计
- LCD1602_ST7032_BOX
- DM320204,SAML10 Xplained Pro 评估套件
- 有奖直播|安森美高能效产品在智能快充的应用
- Microchip电源评估板促销,还有红包送!
- Microchip最新SAM 以及 PIC32单片机软件开发平台-- MPLAB® Harmony V3介绍 ”
- 智能家居当下趋势与挑战 泰科电子助力连接舒适未来
- 安森美半导体重磅推出超低功耗蓝牙芯片 RSL10 — 观视频答题送样片 更有丰富礼品等你拿!
- 蜂窝车联网(C-V2X)测试解决方案|直播已结束
- 免费测评TI LAUNCHXL-CC2650
- 安世半导体&世平集团 Nexperia 在5G基础架构的应用 下载赢好礼!
- 亲历易电源——易电源电源模块试用!
- 有奖直播:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案