STM32 UART2程序

发布者:advancement4最新更新时间:2024-10-12 来源: cnblogs关键字:STM32  UART2程序  端口映射 手机看文章 扫描二维码
随时随地手机看文章

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));             

      }

      

}


ST固件库,有方便的地方,写程序很容易,但是有时候理解起来很麻烦,看自己的喜好然后选择吧。


关键字:STM32  UART2程序  端口映射 引用地址:STM32 UART2程序

上一篇:STM32固件库SYSTEM文件夹介绍
下一篇:stm32设置JTAG工作模式

推荐阅读最新更新时间:2026-03-20 11:43

stm32串口通信程序UART2(TTL)
一、硬件连接 二、串口助手设置: 三、keil下编程 1.要添加的工程文件 二要编写的user文件 1.main.c #include printf.h int main() { printf_init(); printf( \luoyiran is a nice boy\n ); printf( xixi\n ); printf( serial communications is so mystical and interesting!\n ); printf( keep striving!\n ); } 2.printf
[单片机]
<font color='red'>stm32</font>串口通信<font color='red'>程序</font>之<font color='red'>UART2</font>(TTL)
STM32 UART2程序--端口重映射
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
[单片机]
<font color='red'>STM32</font> <font color='red'>UART2</font><font color='red'>程序</font>--端口重映射
STM8S外设的端口映射问题
调试STM8S的PWM输出时用到了定时器的端口映射,在IAR的ST_LINK- Option Bytes选项中开启了端口映射功能,发现原来定时器1的比较输出端口和新映射的定时器1输出比较端口同时输出PWM,原来的引脚无法用作其他功能了
[单片机]
深夜!我偷偷的把室友的STM32换成了GD32
一、什么是GD32 GD32是由北京兆易创新开发的国产32位MCU,基于Arm Cortex- M3/M23/M4内核以及RISC-V内核的32位通用微控制器,与STM32相比,CPU主频更高,内存更多,外设更丰富。其众多产品是以STM32芯片为模板,基于STM32的底层寄存器地址进行正向研发,部分产品可以直接PIN TO PIN替代STM32的芯片,部分型号可以直接以STM32的程序做部分修改后直接烧入进GD32中运行,例如GD32E103、GD32F10x、GD32F30x都是和STM32F10x系列是完全PIN TO PIN兼容的,内部地址寄存器完全兼容,唯一区别只是内核不同,但在使用外设时影响不会很大。 一个大胆的想法
[单片机]
STM32单片机学习】第12章 GPIO—按键轮询
12.1 关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。 按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。 本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。 按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减
[单片机]
STM32输入捕获
输入捕获是处理器捕获外部输入信号的功能,基于定时器抓取输入信号指定触发方式之间的长度。具体有下面三种触发情况: 1、 上升沿触发 2、 下降沿触发 3、 上下都触发 当触发条件发生后,捕获比较寄存器锁定当前的计数值,如果开启了中断或者DMA,就可以通过中断或DMA及时获得数据进行处理。有时可能遇到上一次触发的标志还没清除,下次触发就发生了,此时会将over-capture标志置位,对于可能出现over-capture的情况,建议先读取数据再清除标志,避免在读取标志后及读取数据前这段时间错过over-capture。 配置输入捕获的步骤: 1. 打开定时器和对应输入引脚的时钟 2. 配置引脚为对应的复用功能 3.
[单片机]
I2C、IIC通讯(填坑作,MPU6050数据读取,STM32主控,附源码)
上图的VCC 接 3.3V,GND接地,SCL和SDA分别接上单片机引脚,并加上上拉电阻,AD0接地。 代码链接:https://pan.baidu.com/s/1AvuMYvgX8Xy8g81S0Ay5Yg 提取码:sce0 初始化单片机引脚,并置1 程序里引脚的变化顺序还有延时的位置一定不要错。 IIC起始信号;SDA置零,等待,SCL置零 写入一次数据,IIC每次写入的数据长度都是8Bit,写入顺序是从最高位写到最低位。 SCL置0,SDA存放数据的最高位,数据左移1位,等待,SCL置1,数据起效,等待。 右移7位:1000 0000会变成0000 0001。(0X80 0X01) 左移1位:1101 000
[单片机]
使用micropython开发STM32
一、前言 MicroPython(官网:https://micropython.org),是Python3编程语言的一个完整软件实现,用C语言编写,被优化于运行在微控制器之上。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。(摘抄自weact微行工作室)。 用我的理解简单来说,就是使用C语言往单片机里写了一个Python的解释器,再将MicroPython程序脚本保存到单片机(或外部存储器)内,然后由内部的解释器运行脚本代码。优点就是接
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved