介紹STM32F407串口配置步驟,完成串口的數(shù)據(jù)發(fā)送與接收、實現(xiàn)中斷接收,支持printf重定向。
STM32F407 串口配置說明
STM32F4 的串口資源相當豐富的,功能也相當強勁,STM32F407ZGT6 最多可提供 6 路串口,有分數(shù)波特率發(fā)生器、支持同步單線通信和半雙工單線通訊、支持 LIN、 支持調(diào)制解調(diào)器操作、 智能卡協(xié)議和 IrDA SIR ENDEC 規(guī)范、具有 DMA 等。
【1】串口硬件引腳分析
【2】串口復用引腳介紹
串口寄存器介紹在手冊第26章
GPIO口復用功能引腳配置
F407串口對應的引腳
配置復用功能的寄存器
串口時鐘頻率配置分析
【3】串口1配置示例
Usart.c代碼示例:
#include "usart.h"
?
/*
函數(shù)功能:串口1初始化
函數(shù)形參:
u32 clock :時鐘頻率(默認*1000000HZ) 注意:APB1最大時鐘頻率為42MHZ APB2最大時鐘頻率為84MHZ
u32 baud :波特率
硬件連接:
PA9--- >TX
PA10-- >RX
*/
void USART1_Init(u32 clock,u32 baud)
{
/*1. 開時鐘*/
RCC- >AHB1ENR|=1< 0;//使能PORTA時鐘
RCC- >APB2ENR|=1< 4;//使能USART1時鐘
/*2. 復位串口時鐘*/
RCC- >APB2RSTR|=1< 4; //使能USART1復位時鐘
RCC- >APB2RSTR&=~(1< 4); //關(guān)閉USART1復位時鐘
/*3. 配置GPIO口模式*/
GPIOA- >MODER&=~(0x3< 9*2); //清除模式
GPIOA- >MODER|=0x2< 9*2; //配置復用功能模式
GPIOA- >MODER&=~(0x3< 10*2); //清除模式
GPIOA- >MODER|=0x2< 10*2; //配置復用功能模式
GPIOA- >OTYPER&=~(0x1< 9); //0表示推挽輸出
GPIOA- >OSPEEDR&=~(0x3< 9*2); //清除之前配置
GPIOA- >OSPEEDR|=0x2< 9*2; //50MHZ輸出速度
GPIOA- >PUPDR&=~(0x3< 10*2); //清除之前配置
GPIOA- >PUPDR|=0x1< 10*2; //配置上拉
GPIOA- >AFR[1]&=~(0xF< 4*1); //清除PA9配置
GPIOA- >AFR[1]|=0x7< 4*1; //配置PA9復用功能模式為串口1
GPIOA- >AFR[1]&=~(0xF< 4*2); //清除PA10配置
GPIOA- >AFR[1]|=0x7< 4*2; //配置PA10復用功能模式為串口1
/*4. 配置USART-CR寄存器*/
USART1- >BRR=(clock*1000000)/baud;//配置波特率
USART1- >CR1|=1< 3; //使能發(fā)送
USART1- >CR1|=1< 2; //使能接收,并開始搜尋RX引腳上的起始位
USART1- >CR1|=1< 13; //USART模塊使能。
}
?
?
/*
函數(shù)功能:串口字符串發(fā)送
函數(shù)形參:
USART_TypeDef *USARTx :串口的類型 (USART1 USART2 USART3)
u8 *str:將要發(fā)送的字符串
*/
void USARTxSendString(USART_TypeDef *USARTx,u8 *str)
{
while(*str!='\\0')
{
USARTx- >DR=*str;
while(!(USARTx- >SR&1< 7)){} //等待發(fā)送完成
str++;
}
}
?
?