USART_InitTypeDef USART_InitStruct;

//system_stm32f4xx.c 316 8
//stm32f4xx.h 123 25000000 8000000

//1.打开对应时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

//2.复用GPIO功能
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

//3.UART配置
调用USART_Init()
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
USARTx USART控制接口 取值范围 :USART1~6

uint32_t USART_BaudRate;
功能:配置波特率
寄存器:BBR寄存器
取值范围:115200

uint16_t USART_WordLength;
功能:配置字长
寄存器:CR1寄存器 12位
取值范围:USART_WordLength_8b  USART_WordLength_9b

uint16_t USART_StopBits;
功能:配置停止位
寄存器:CR2 12 13寄存器
取值范围:USART_StopBits_1  ..

uint16_t USART_Parity;
功能:奇偶校验

寄存器:CR1 9 10

取值范围:USART_Parity_No 无奇偶校出验位  USART_Parity_Even   USART_Parity_Odd

uint16_t USART_Mode;
功能:开启发送和接收

寄存器:CR1 2 3

取值范围:USART_Mode_Rx USART_Mode_Tx

uint16_t USART_HardwareFlowControl;
功能:控制流

寄存器:CR3 8 9

取值范围:USART_HardwareFlowControl_None

代码示例:

//实现透传 通过PC发送一个数据给开发板

//开发板在接收到数据之后,返回给PC

GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
//1.打开USART控制器时钟
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

//PA9 PA10 配置成复用
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;
//GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

//选择复用关系
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2 );
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2 );

------配置USART-------

USART_InitStruct.USART_BaudRate = 115200;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

//发送和接收都需要打开

USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_Init(USART2, &USART_InitStruct);

初始化串口, 对于接收,接收端不知道数据什么时候来,需要打开中断。

/*
USART_ITConfig
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)

三个参数
USARTx 1~6

中断类型:USART_IT_RENX

NewState ENABLE DISABLE

*/

USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

//NVIC管理器
NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x0;
NVIC_Init(&NVIC_InitStruct);

//USART2串口使能
USART_Cmd(USART2, ENABLE);

USART操作

/*
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
*/

void USART2_IRQHandler(void)
{
u8 data =0;
//1.判断中断类型
/*
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

*/

//SR RXNE只要DR 有数据,该位会自动置1
//当读取该位时候,会自动清零
if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
{
data = USART_ReceiveData(USART2);

USART_SendData(USART2, data);
switch(data )
{
case '0':
LED1 = 0;
break;
case '1':
LED1 = 1;
break;
case '2':
BEEP = 1;
break;
case '3':
BEEP = 0;
break;
case '4':
LED2 = 0;
break;
case '5':
LED2 = 1;
break;
case '6':
LED1 = 1;
LED2 = 1;
BEEP = 0;
break;
default:
break;
}

//清空状态
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
}

STM32_USART的更多相关文章

  1. [stm32] NRF24L01+USART搞定有线和无线通信

    前言 一般进行远程监控时,2.4G无线通信是充当远程数据传输的一种方法.这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据 ...

随机推荐

  1. FastDFS接口API文档说明

    FastDFS接口API文档说明 时间:2012-03-17 来源:R9IT 作者:R9传奇 一.命令行的上传: 上传命令1. /usr/local/bin/fdfs_upload_file conf ...

  2. SystemTray文字颜色问题

    今天想给SystemTray的ForegroundColor设置为白色,但是模拟器正确,真机仍为黑色.经过一番折腾,发现是微软做了限制,背景是什么颜色,ForegroundColor就不能为什么颜色. ...

  3. Complexity Behind Closure

    这篇文章同时发布在github上 这篇文章是我对ooc编译器里一个小bug调试时作的手记.虽然相信大多数人对编译器(并且是一门小众语言的编译器)并不感兴趣,但这篇文章可以给C用户们提供一些Object ...

  4. WPF界面设计

    WPF仿360卫士9.0界面设计   Chrome插件——一键保存网页为PDF1.0 http://www.cnblogs.com/bdstjk/p/3163723.html 仿照网上的一个代码写的, ...

  5. linux netstat 命令详解

    linux netstat 命令详解 1.功能与说明 netstat 用于显示linux中各种网络相关信息.如网络链接 路由表  接口状态链接 多播成员等等. 2.参数含义介绍 -a (all)显示所 ...

  6. hdu 3333 Turing Tree(线段树+离散化)

    刚看到是3xian大牛的题就让我菊花一紧,觉着这题肯定各种高端大气上档次,结果果然没让我失望. 刚开始我以为是一个普通的线段树区间求和,然后啪啪啪代码敲完测试没通过,才注意到这个求和是要去掉相同的值的 ...

  7. oracle-计算工作日

    数据库模拟表如下 operate_id operate_type operate_date process_sn 1 GD 2013-09-15 17:18:37 10001 2 JD 2013-09 ...

  8. java Integer 源码学习

    转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...

  9. List中函数用法 First,FirstOrDefault,Single,SingleOrDefault的区别

    操作符 如果源序列是空的 源序列只包含一个元素 源序列包含多个元素 First 抛异常 返回该元素 返回第一个元素 FirstOrDefault 返回default(TSource) 返回该元素 返回 ...

  10. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...