-
STM32
学习笔记——之
USART1
篇
三个
USART
:
USART1
位于高速
APB2
总线上,
USART2
、
3
位于
APB1
总线上
学习环境:
STM32
芯片:
STM32F103VBT
6
开发板:万利
STM3210B-LK1
USART1
引脚
PA9
——
USART1
TX
,
PA10
——
USART1 RX
1
、
USA
RT1
与
PC
串口通信(
STM32
串口发送)
首
先需要进行
USART1
的配置,方可实现串口通信功能
USART1
配置(使用
< br>STM32
固件库
V2.0
)<
/p>
:
①开启
US
ART1
时钟以及
GPIOA
端口时钟
RCC_APB2PeriphClockCmd(RCC_
APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
②配置
USART1
的
RX
(
PA10
)引脚以及<
/p>
TX
(
PA9
)
引脚
首先定义结构体变量,用来配置相应引脚的速度以及输入
输出模式
GPIO_InitTypeDef
GPIO_InitStructure;
/***********************************
结构体声明如下
typedef
struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
************************************/ <
/p>
配置
USART1
的
RX
(
PA10
)引脚
GPIO__Pin = GPIO_Pin_10;
GPIO__Mode = GPIO_Mode_IN_FLOATING;
//
浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
配置
USART1
的
< br>TX
(
PA9
)引脚
GPIO__Pin = GPIO_Pin_9;
GPIO__Speed = GPIO_Speed_50MHz;
GPIO__Mode = GPIO_Mode_AF_PP;
//
复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);
③配置
USART1
的波特率、数据位
数、停止位、校验以及硬件流控制
首先定义结构体变量
USART_InitTypeDef
USART_InitStructure;
/******
**************************************
/* USART Init Structure definition */
typedef struct
{
u32 USART_BaudRate;
u16
USART_WordLength;
u16 USART_StopBits;
u16 USART_Parity;
1
u16 USART_Mode;
u16 USART_HardwareFlowControl;
}
USART_InitTypeDef;
********************
************************/
USART__BaudRate
= 9600;
//
波特率
--9600
USART__WordLength =
USART_WordLength_8b; //
数据位数
-
-8
位
USART__StopBits
= USART_StopBits_1;
//
停止位
—
1
位
USART__Parity =
USART_Parity_No;
//
无校验
USART__HardwareFlowControl
=
USART_HardwareFlowControl_None;
//
无硬件
流控制
USART__Mode = USART_Mode_Rx |
USART_Mode_Tx;
USART_Init(USART1,
&USART_InitStructure);
④使能
USART1
USART_Cmd(USART1, ENABLE);
自
此上面四步即可实现
USART1
串口配置
(
1
)利用
STM32
固件库实现
USART1
串口发送功能
实现
USART1<
/p>
配置后,即可实现串口通信功能,在此下面程序实现了
USART
1
串口发送功能
CPU_INT08U TxBuffer[] =
TxBu
ffer[]
为
USART1
准备发送
到
PC
的字符串,此发送程序通过
UC
OS-II
建立任务实现,发送函数使
用
STM32
固件库
V2.0
中的发送
函数实现,任务程序如下
static void
Task3Usart1(void *pdata)
{
CPU_INT08U TxCounter = 0;
pdata = pdata;
while(1)
{
while(TxCounter <
strlen(TxBuffer))
{
USART_SendData(USART1,
TxBuffer[TxCounter++]);
//
串口发送函数
while(USART_GetFlagStatus(USART1,
USART_FLAG_TXE) == RESET)
{}
//
等待串口发送寄存器为空
}
TxCounter = 0;
OSTimeDly(OS_TICKS_PER_SEC);
延时,实现任务切换
}
}
本
节实现了使用
STM32
固件库实现
U
SART1
的配置以及通过固件库的发送函数实现串口发送功能;
(
2
)利用
printf
函数实现
USART1
向
PC
发送数据
首先将
Project->Options->General
Options->Library Configuration->Library
下拉列表框中选为
FULL
其次进行宏定义,并包含头文件
#include
#define PUTCHAR_PROTOTYPE int fputc(int
ch, FILE *f)
再次将
printf
函数进行修改,将其指向
USART1
PUTCHAR_PROTOTYPE
{
2