历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2019年01月07日 | STM32F103RCT6+USART3+UART5初始化代码

2019-01-07 来源:eefocus

USART和UART的区别就是:USART支持同步收发,UART只支持异步收发


同步模式:USART 需要同步始终信号USART_CK,通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。


1>USART3初始化


void USART3_init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //使能USART3,GPIOB时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能USART3,GPIOB时钟

    USART_DeInit(USART3);  //复位串口3

    //USART3_TX   PB10

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

    GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化Pb10

    //USART3_RX   PB11

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入

    GPIO_Init(GPIOB, &GPIO_InitStructure);  //初始化PB11

 

    //Usart1 NVIC 配置

    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级3

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

    NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

 

    //USART 初始化设置

    USART_InitStructure.USART_BaudRate = 115200;//一般设置为115200;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

    USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位

    USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式

    USART_Init(USART3, &USART_InitStructure); //初始化串口

 

    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启USART3接收中断

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

}

USART3接收中断服务程序


//串口3中断服务程序

void USART3_IRQHandler(void)

{

    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收中断

    {      

            USART3_RX_BUF[0]=USART3->DR;//读取接收到的数据;     

    }

}

USART3发送函数


void UART3_SendOneByte(u8 dat)

{

    while((USART3->SR&0X40)==0) {}; //循环发送,直到发送完毕

    USART3->DR = (u8) dat;

}

USART1/2/3代码几乎差不多,注意TXD、RXD引脚的初始化即可!


2>UART5初始化代码


注意NVIC中断通道是: UART5_IRQn


void UART5_init(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE); //使能UART5,GPIOB时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); //使能

   GPIOC/D时钟

    USART_DeInit(UART5);  //复位串口5

    //USART5_TX   PC12

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PC12

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

    GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化PC12

    //USART5_RX   PD2

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入

    GPIO_Init(GPIOD, &GPIO_InitStructure);  //初始化PB11

 

    //Usart1 NVIC 配置

    NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级3

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

    NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

 

    //USART 初始化设置

    USART_InitStructure.USART_BaudRate = USART3Baud;//一般设置为;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

    USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位

    USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式

    USART_Init(UART5, &USART_InitStructure); //初始化串口

 

    USART_ITConfig(UART5, USART_IT_RXNE, ENABLE);//开启中断

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

}

UART5中断服务程序


void UART5_IRQHandler(void)

{

    if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)//接收中断

    {      

            USART3_RX_BUF[0]=UART5->DR;//读取接收到的数据;               

    }

}


按照如上配置后 


出现无法发送或者接收数据,请仔细检查串口的TXD、RXD引脚是否在其他地方被使用,比如我的串口5的RX引脚PD2就作为了


AT24C02的SCL线,导致无法接收数据

推荐阅读

史海拾趣

Belden Wire & Cable公司的发展小趣事

在1902年,Joseph C. Belden在美国芝加哥创立了Belden公司,标志着这家电线电缆公司的诞生。创立初期,公司便专注于电线电缆的研发和生产,凭借其卓越的产品质量和可靠的性能,逐渐在市场上崭露头角。随着业务的发展,Belden逐渐扩大了生产规模,并增设了多个生产基地,以满足不断增长的市场需求。

American Power Management Inc公司的发展小趣事

为了进一步提升竞争力,APMI开始实施国际化发展战略。公司积极开拓海外市场,与国际知名电子制造商建立合作关系。同时,APMI还加强了与国际同行的技术交流与合作,吸收借鉴先进的管理经验和技术成果。通过国际化发展,APMI不仅拓宽了市场渠道,还提升了公司的国际影响力。

Fluke公司的发展小趣事

随着电子行业的快速发展,新技术不断涌现,市场竞争也日趋激烈。面对这一变革,APMI及时调整战略,加大研发投入,紧跟技术潮流。公司不仅推出了多款具有竞争力的新产品,还积极拓展新的应用领域,如新能源汽车、物联网等。通过不断创新和拓展,APMI成功应对了行业变革带来的挑战,保持了持续稳健的发展态势。

Elpress AB公司的发展小趣事

Elpress AB始终将质量管理作为公司发展的核心。公司建立了完善的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。为了进一步提升产品质量和管理水平,Elpress AB于1992年获得了ISO 9001认证,成为电气连接领域的领军企业之一。此后,公司还通过了ISO 14001:2015环境管理体系认证,积极履行环保责任。

DB Lectro Inc公司的发展小趣事

作为一家有社会责任感的企业,DB Lectro Inc始终关注绿色制造和可持续发展。公司在生产过程中采用了环保材料和节能技术,降低了对环境的影响。同时,公司还积极参与公益活动和慈善事业,为社会做出了积极贡献。这些举措不仅提升了公司的品牌形象和社会声誉,还为公司赢得了更多客户和合作伙伴的信任和支持。

宜源科技(ETERNAL)公司的发展小趣事

随着国内市场的饱和,宜源科技公司积极寻求海外市场的发展机会。公司加强与国际知名企业的合作,共同开发新产品,拓展市场份额。同时,宜源科技还积极参加国际展会和论坛,提升品牌知名度和影响力。通过不懈的努力,宜源科技的产品已经成功进入多个国家和地区,实现了国际化发展。

问答坊 | AI 解惑

GPRS模块通讯问题

我用模块进行gprs连接的时候,状态总是显示 connecting,不知道是什么原因,哪位朋友能帮帮忙,指教一下啊?…

查看全部问答>

電子電路設計需要哪些基礎知識

電子線路設計需要哪些基礎知識 如電源部份掌握的知識 邏輯部份如CPU工作的系統條件與外圍器件如何溝通的 數電 模電 PCB 設計 輔助軟件應用等…

查看全部问答>

奇怪,我的VS2005找得到WINCE5模拟器,却启动不成功。WINCE5模拟器是完全安装VS2005是装上去的。

奇怪,我的VS2005在模拟器管理里找得到WINCE5模拟器,却启动不成功。WINCE5模拟器是完全安装VS2005是装上去的。…

查看全部问答>

Wince 模拟u盘问题。

现在想把wince5 模拟成U盘,用了wince5的源码usbfn,storage目录中。 注册表也做了相应的改动,现在pc机已经能够识别出Upan。 可是在通信过程中,PC机老是会发 0x23指令,而次指令并不支持。导致reset。 在网上查到: 一个U盘插上,Windows要连 ...…

查看全部问答>

两个线程之间的切换所需要的时间

请教大家一个线程的切换问题:请高手们指点指点    在我的程序中用到好几个线程,而且在线程中频繁用到SLEEP()延时函数, 这样可能会造成线程间的频繁切换,可能会使软件的运行效率降低, 我想知道两个线程之间的切换需要多少时间 ...…

查看全部问答>

flash中数据存储可靠性问题

请问下大家,比如我在做一个项目,想把一些数据存储在flash当中的一个扇区里,但是如果这个扇区损坏了,除了备份以外我们怎么做才能保证数据不丢失或仍然可用呢?软件或硬件的方法都可以,大家帮忙讨论下,谢谢大家…

查看全部问答>

缺氧报警器

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 …

查看全部问答>

SOIC窄体16PIN1.27mm脚距,这种封装在元件库里焊盘一般宽和长是多少?

SOIC窄体16PIN1.27mm脚距,这种封装在元件库里焊盘一般宽和长是多少? 在orcad中发现宽有0.6mm,长竟然有2.5mm。 焊盘的画法是否有相应的标准来参照啊…

查看全部问答>

stm32的tim输出比较模式区别

timing  toggle  active inactive四种模式有什么区别 比较匹配时,输出管脚可以保持它的电平(OCxM=000)、 被设置成有效电平(OCxM=001)、   ?? 被设置成无有效电平(OCxM=010)   ? ? 或进行翻转 ...…

查看全部问答>

滤波电路和放电路对片式钽电容器参数性能的不同选择

转载的:(http://blog.163.com/qhrong718@126/blog/static/882427522011024567513/?fromdm&isFromSearchEngine=yes) 一,滤波电路中使用的片式钽电容器的性能选择     滤波电路是片式钽和氧化铌电容器最常用电路, 电容 ...…

查看全部问答>