STM32F103中USART2的使用

发布者:SereneSpirit最新更新时间:2018-06-01 来源: eefocus关键字:STM32F103  USART2 手机看文章 扫描二维码
随时随地手机看文章

USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。

因为USART2可以映射成不同的端口,所以要端口映射。

结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.)

STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。


程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30.


void USART2_Initialise( u32 bound )

{

    GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå

    NVIC_InitTypeDef NVIC_InitStructure;//ÖD¶Ï3õê¼»ˉ½á11ìå

    USART_InitTypeDef USART_InitStructure;//′®¿ú3õê¼»ˉ½á11ìå  

    

    /* Enable the USART2 Pins Software Remapping */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); 

    

    

    /* Configure USART2 Rx (PA.03) as input floating */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;    

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

    

    /* Configure USART2 Tx (PA.02) as alternate function push-pull */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

    

    /* Enable the USART2 Interrupt */

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);    

    

    USART_InitStructure.USART_BaudRate = bound;                //ò»°ãéèÖÃÎa9600;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½

    USART_InitStructure.USART_StopBits = USART_StopBits_1;     //ò»¸öí£Ö1λ

    USART_InitStructure.USART_Parity = USART_Parity_No;        //ÎTÆæżD£Ñéλ

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//Yá÷¿ØÖÆ

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//êÕ·¢Ä£ê½   

    

    USART_Init(USART2, &USART_InitStructure);

    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

    //USART_ITConfig(USART2, USART_IT_TXE, ENABLE);

    /* Enable USART2 */

    USART_Cmd(USART2, ENABLE);

}

void USART2_IRQHandler(void)  

  

{  

     if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET)  

      {       

              USART_SendData(USART2, USART_ReceiveData(USART2));             

      }

      

}

该程序功能是返回你发送到串口的数据。

如果你的USART2接到PD端口上面了,要修改程序如下,这里就需要端口映射了,映射寄存器是AFIO控制的,它接在APB2时钟区域,所以下面的红色代码必须要有,蓝色代码对端口进行初始化。

void USART2_Initialise( u32 bound )

{

    GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå

    NVIC_InitTypeDef NVIC_InitStructure;//ÖD¶Ï3õê¼»ˉ½á11ìå

    USART_InitTypeDef USART_InitStructure;//′®¿ú3õê¼»ˉ½á11ìå  

    

    /* Enable the USART2 Pins Software Remapping */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD ,ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);    

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

    GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);    

    

    /* Configure USART2 Rx (PD.06) as input floating */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;    

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOD, &GPIO_InitStructure);

    

    /* Configure USART2 Tx (PD.05) as alternate function push-pull */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

    GPIO_Init(GPIOD, &GPIO_InitStructure);

    

    /* Enable the USART2 Interrupt */

    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);    

    

    USART_InitStructure.USART_BaudRate = bound;//ò»°ãéèÖÃÎa9600;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½

    USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ

    USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTÆæżD£Ñéλ

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//¾Yá÷¿ØÖÆ

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//êÕ·¢Ä£ê½   

    

    USART_Init(USART2, &USART_InitStructure);

    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

    //USART_ITConfig(USART2, USART_IT_TXE, ENABLE);

    /* Enable USART2 */

    USART_Cmd(USART2, ENABLE);

}

void USART2_IRQHandler(void)  

  

{  

     if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET)  

      {       

              USART_SendData(USART2, USART_ReceiveData(USART2));             

      }

      

}


关键字:STM32F103  USART2 引用地址:STM32F103中USART2的使用

上一篇:STM32串口DMA连续发送两帧,导致数据部分覆盖的问题
下一篇:STM32 UART2 中断函数的写法

推荐阅读最新更新时间:2024-03-16 16:04

STM32F103V IWDG 独立看门狗操作
最近编写一个程序,因为需要考虑到可靠性,所以需要在程序了添加看门狗功能。查了下STM32的相关资料,于是利用下库文件来实现IWDG独立看门狗操作。首先需要调用库文件 #include stm32f10x_iwdg.h 再配置下看门狗相关参数 //////////独立看门狗IWDG设置//////////////////////////////////// void WatchDog_int(void)// 独立看门狗IWDG设置 { /* Enable write access to IWDG_PR and IWDG_RLR registers */ IWDG_WriteAccessCmd(IWDG_WriteAcces
[单片机]
基于STM32F103C8T6单片机的计步器设计
一.系统设计 由 STM32F103C8T6 单片机 最小系统 + AD XL345 + L CD1602 显示屏。通过ADXL345 检测 震动和移动并完成计数。累加的步数会传输到LCD1602上进行显示,可以直观的观察自己的步数。 图1 系统框图 二. 硬件 设计 系统内的主要电路有单片机最小系统电路,步数采集电路、显示电路,系统的内的电路并不复杂,只实现的步数的采集累加以及显示的功能。对于计步器而言,本系统的步数采集能力较为不错,有较高的灵敏度。 图2 硬件电路 三.软件设计 系统的软件逻辑清晰,首先先进行一次系统初始化,此时就开始进行计步检测。当完成计步后会将采集到的步数 信息 在显示屏上进行显示,判断是否完成
[单片机]
基于<font color='red'>STM32F103</font>C8T6单片机的计步器设计
基于STM32F103的USB数据采集模块的设计
通用串行总线(USB,universalserialbus)由于具有高传输速率、即插即用和易于扩展等优点而被广泛应用于计算机外设、数字设备和仪器仪表等领域。ARM嵌入式处理器因其低廉的成本和较好的性能被广泛地应用于企业应用、汽车系统、家庭网络和无线技术等市场领域。将USB与ARM相结合是进行数据采集、处理与传输的理想解决方案。 1、USB数据采集系统概述 USB数据采集系统由主机和USB设备两部分组成,如图1所示。本系统中,PC作为USB主机,USB采集模块作为USB设备,通过USB接口与主机相连。模块与主机连接之后,主机能够正确识别设备并将设备初始化(枚举)。设备初始化完毕后,主机向采集模块发送采集命令和任务参数。采集模块正
[单片机]
基于<font color='red'>STM32F103</font>的USB数据采集模块的设计
stm32f103 串口通讯
串口通讯(SerialCommunication)是一种设备间非常常用的串行通讯方式,因为它简单 便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。 stm32f103 串口通讯大致可以分为这五步 1.初始化gpio口,使能RX和TX引脚GPIO时钟 2.初始化USART,和USART时钟; 3.初始化nvic 总中断 4.编写字符串发送函数 5.编写USART 中断服务函数 1.初始化gpio口,使能RX和TX引脚GPIO时钟 void init_uart_gpio(void) { GPIO_InitTypeDef tx; GPIO_InitTypeDef
[单片机]
STM32F103模拟IIC
在用STM32F103模拟IIC时,SDA的配置很有意思,既要读数据,又要写数据,这两者之间的切换通过GPIO的配置寄存器来实现。 #define SDA_IN() {GPIOB- CRL&=0X0FFFFFFF;GPIOB- CRL|=8 28;} #define SDA_OUT() {GPIOB- CRL&=0X0FFFFFFF;GPIOB- CRL|=3 28;} 就是这两句话,GPIO配置寄存器分为端口配置低寄存器(GPIOx_CRL) (x=A..E)和端口配置高寄存器(GPIOx_CRH) (x=A..E);在这里用到的是PB7模拟IIC的SDA,所以切换配置时,先将原配置清零,GPIOB- CRL&=0X0FFFFF
[单片机]
<font color='red'>STM32F103</font>模拟IIC
stm32f103读取红外接收HS0038A2
软件: IAR 7.4 STM32CubeMX 4.14.0 硬件: STM32F103VBT6 原理图,和手册建议的基本一致,只是上拉电阻不是手册建议的10K以上,这里的面板距离控制器比较远,可能是考虑到线阻。 HAL配置,使用Cubemx。 HS0038A2的输出,带有上拉电阻,接着一个led灯,因此TIM3的IC脚浮空。 设计者恰好把IR设计在TIM3的通道4上。如果使用了通道1/2, 就可以使用PWM输入方式来捕捉红外脉冲,可以拿到每个脉冲的数据。 IC模式使用下降沿。 红外控制这里是常用的NEC协议。遥控器输出高电平,而HS0038A2转换低电平输出。 如,一个9ms高+4.5ms的低,组成一个h
[单片机]
<font color='red'>stm32f103</font>读取红外接收HS0038A2
STM32F103RB 实作笔记(七)- 外来中断试验
关于中断和 计时寄存器的有关理论, 有兴趣的朋友可以看我一年前写的笔记 :“STM32F072RB 实作笔记(五)- 计时器加上中断EXTI_IRQHandler(一)” 和 “(二)” 两篇笔记。 这一篇笔记就直接解析实验的程式内容 main.c 和前几篇一样,进入“实验5 外部中断实验” 的 USER 资料夹点开 MDK 的项目档案。执行编译。 以下是 main.c 的内容: #include key.h #include beep.h #include usart.h #include exti.h /************************************************/ in
[单片机]
<font color='red'>STM32F103</font>RB 实作笔记(七)- 外来中断试验
W5100与STM32F103接口电路原理图
本电路中选用直接总线接口模式,以最大限度地提高数据的传输速率。依托W5100完善的TCP/IP协议处理功能,使DSP在没有操作系统的支持下接入Internet网络,具有简单、可靠、价格低廉等优点。 W5100 与STM32F103接口电路原理图:
[单片机]
W5100与<font color='red'>STM32F103</font>接口电路原理图
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved