历史上的今天
返回首页

历史上的今天

今天是:2025年04月16日(星期三)

正在发生

2021年04月16日 | STM32串口USART2程序

2021-04-16 来源:eefocus

简介:对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz。PA2,PA2端口复用为串口2的TX,RX。在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到了端口B, 因此要对这个端口的时钟。进行使能,同时由于用到复用IO口功能用于配置串口。因此还要使能AFIO(复用功能IO)时钟。


原理图:


程序分析:


int main(void)


{




uint8_t a=0;


/* System Clocks Configuration */


RCC_Configuration();//系统时钟设置




/*嵌套向量中断控制器


说明了USARTx抢占优先级级别0(最多1位) ,和子优先级级别0(最多7位) */


NVIC_Configuration();//中断源配置




/*对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz。PA2,PA2端口复用为串口2的TX,RX。


在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到了端口B, 因此要对这个端口的时钟


进行使能,同时由于用到复用IO口功能用于配置串口。因此还要使能AFIO(复用功能IO)时钟。*/


GPIO_Configuration();//端口初始化




USART_Config(USART2);//串口1初始化




USART_OUT(USART2,"****(C) COPYRIGHT 2013 奋斗嵌入式开发工作室 *******rn"); //向串口1发送开机字符。


USART_OUT(USART2,"* *rn");


USART_OUT(USART2,"* 奋斗版STM32开发板 USART2 实验 *rn");


USART_OUT(USART2,"* *rn");


USART_OUT(USART2,"* 以HEX模式输入一串数据,以16进制0d 0a作为结束 *rn");


USART_OUT(USART2,"* *rn");


USART_OUT(USART2,"* 奋斗STM32论坛:www.ourstm.net *rn");


USART_OUT(USART2,"* *rn");


USART_OUT(USART2,"***************************************************rn");


USART_OUT(USART2,"rn");


USART_OUT(USART2,"rn");


while (1)


{


if(rec_f==1){//判断是否收到一帧有效数据


rec_f=0;


USART_OUT(USART2,"rn您发送的信息为: rn");


USART_OUT(USART2,&TxBuffer1[0]);


if(a==0) {GPIO_SetBits(GPIOB, GPIO_Pin_5); a=1;} //LED1 V6(V3板) V2(MINI板) 明暗闪烁


else {GPIO_ResetBits(GPIOB, GPIO_Pin_5);a=0; }


}


}


}

时钟初始化RCC_APB2Periph_GPIOA ()



void RCC_Configuration(void)


{


SystemInit();


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOD |


RCC_APB2Periph_AFIO , ENABLE);


RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE);


}


中断向量初始化,分组NVIC_PriorityGroup_0 ,初始化USART2_IRQn


void NVIC_Configuration(void)


{


/* 结构声明*/


NVIC_InitTypeDef NVIC_InitStructure;




/* Configure the NVIC Preemption Priority Bits */


/* Configure one bit for preemption priority */


/* 优先级组 说明了抢占优先级所用的位数,和子优先级所用的位数 在这里是1, 7 */


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);




NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //设置串口2中断


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级为0


NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能


NVIC_Init(&NVIC_InitStructure);

}


GPIO初始化


void GPIO_Configuration(void)


{


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1控制--PB5


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出


GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


GPIO_Init(GPIOB, &GPIO_InitStructure);




GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//RS485输入输出控制


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出


GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


GPIO_Init(GPIOD, &GPIO_InitStructure);


GPIO_SetBits(GPIOD, GPIO_Pin_12); //RS485输出模式 禁止485输入




GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //USART2 TX


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


GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口




GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //USART2 RX


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //复用开漏输入


GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口




GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //LCD背光控制


GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


GPIO_Init(GPIOD, &GPIO_InitStructure);


GPIO_ResetBits(GPIOD, GPIO_Pin_13); //LCD背光关闭

}



void USART_Config(USART_TypeDef* USARTx){


USART_InitStructure.USART_BaudRate = 115200;//速率115200bps


USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据位8位


USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位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;//收发模式




/* Configure USARTx */


USART_Init(USARTx, &USART_InitStructure);//配置串口参数函数






/* Enable USARTx Receive and Transmit interrupts */


USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断


USART_ITConfig(USART2, USART_IT_TXE, ENABLE);//使能发送缓冲空中断




/* Enable the USARTx */


USART_Cmd(USART2, ENABLE);

}


推荐阅读

史海拾趣

ALLEN BRADLEY公司的发展小趣事

ALLEN BRADLEY 公司是一家享有盛誉的电子行业企业,其发展历程有许多引人注目的里程碑。以下是关于 ALLEN BRADLEY 公司发展的五个相关故事:

  1. 公司成立和早期发展: ALLEN BRADLEY 公司于1903年由Lynde Bradley和Dr. Stanton Allen 在美国威斯康星州的密尔沃基市成立。最初,公司主要从事制造电气开关、继电器和其他电气控制设备。他们的产品质量和可靠性使其迅速成为当时工业领域的领先供应商之一。

  2. 工业自动化的先驱: 在20世纪上半叶,ALLEN BRADLEY 公司成为工业自动化领域的先驱之一。他们开发了许多创新的产品和技术,如PLC(可编程逻辑控制器),这项技术彻底改变了工厂和生产线的运作方式。PLC的普及使得生产自动化水平大幅提高,为工业生产效率的提升做出了重要贡献。

  3. 公司的扩张与国际化: 随着业务的不断壮大,ALLEN BRADLEY 公司开始向全球扩张。他们在世界各地建立了销售和服务网络,为客户提供更加全面的支持。逐步建立的全球业务网络使得 ALLEN BRADLEY 成为了全球工业自动化领域的领先品牌之一。

  4. 汇丰电气(Rockwell Automation)的收购: 1990年,汇丰电气公司(Rockwell International)收购了 ALLEN BRADLEY 公司。这一收购加强了两家公司在工业自动化领域的实力,并进一步巩固了其在全球市场上的地位。汇丰电气公司将 ALLEN BRADLEY 公司的产品整合到其工业自动化解决方案中,为客户提供更加全面的解决方案和服务。

  5. 持续创新与发展: ALLEN BRADLEY 公司一直致力于持续创新和技术发展。他们不断推出新产品,引领着工业自动化技术的发展方向。通过不断地投资研发和技术创新,ALLEN BRADLEY 公司在工业自动化领域保持着领先地位,并为客户提供更加先进、高效的解决方案。

以上是 ALLEN BRADLEY 公司发展的五个相关故事,这些故事展示了该公司在电子行业中的重要地位和不断发展壮大的历程。

GETEDZ ( HVGT)公司的发展小趣事
要仔细分析电器设备之间的动作关系,确保联锁逻辑的正确性。
创世(CS)公司的发展小趣事

随着产品的不断创新和技术的不断突破,创世公司的市场份额逐渐扩大。公司的SD NAND产品已经广泛应用于医疗设备、工业控制、轨道交通、安防、网络设备等多个领域。这一市场布局的成功,不仅提升了创世公司的品牌影响力,也为其在电子行业树立了良好的口碑。同时,创世公司还积极参与各种行业展会和交流活动,与国内外客户建立了广泛的合作关系,进一步拓展了市场。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,ACP Optoelectronic Technology Co Ltd开始积极拓展国际市场。公司积极参加国际电子展会和技术交流活动,与海外企业建立合作关系,拓展销售渠道。经过几年的努力,ACP Optoelectronic Technology Co Ltd的产品已经成功打入多个国际市场,公司也逐渐发展成为一家具有国际影响力的光电企业。

Azoteq公司的发展小趣事

最近,Azoteq宣布推出了一款电容、电感和霍尔效应组合传感器——IQS620。这款传感器是传感领域的重大突破,它将电容式触摸和接近传感、电感传感以及霍尔效应传感集成在一个低姿态的封装中。这种高度集成化的设计使得IQS620在可穿戴设备、移动设备和安全等多个领域都有广泛的应用前景。IQS620的推出,不仅展示了Azoteq在传感技术方面的深厚实力,也为其在未来的市场竞争中注入了新的活力。

这些故事展示了Azoteq公司在电子行业中的发展历程和取得的成就。从创立初期的LightSense™系列产品,到后续的电容式触摸和接近感应市场拓展,再到PowerSense™和ProxFusion®产品系列的推出,以及最新的IQS620传感器的发布,Azoteq始终紧跟市场趋势,不断创新,为客户提供高质量的半导体解决方案。

Free2Move公司的发展小趣事

近年来,Azoteq在传感技术方面取得了重大突破。其最新产品系列——ProxFusion®,是世界上第一个单芯片集成多传感器功能的解决方案。这一创新产品将多种传感功能集成在一个芯片上,为客户提供了更加便捷、高效的解决方案。ProxFusion®的推出,再次展现了Azoteq在传感技术领域的领先地位。

问答坊 | AI 解惑

GT800与GSM-R网络融合的问题探讨

 随着指挥调度和应急通信需求的增长,数字集群通信系统的重要性日益显著,数字集群通信在安全保障、会务组织、公安、消防、交通、急救等应急部门的联合调度和指挥等任务中发挥越来越重要的作用。  所谓集群通信是指系统可用信道可为系统中全体用 ...…

查看全部问答>

ARM软件模拟硬件环境软件

本人太穷买不起1000+的板子,现请教高手介绍一款纯软件模拟硬件的软件,可以下载啊,跑程序啊 不知道有没有这种软件 [ 本帖最后由 frozenrain 于 2008-7-7 17:40 编辑 ]…

查看全部问答>

跪求电感

请问做开关电源,电感和变压器如何做更好…

查看全部问答>

VC应用程序调用驱动程序中的函数

公司要我做一个应用 程序去调用 驱动 程序中的函数,自己查了资料 现在还是没法入手,请各位大哥帮帮忙,应用程序用VC做,驱动程序以经包在系统中下到板子中了,系统是wince5.0, 驱动程序是看门狗,硬件2440…

查看全部问答>

继电器的选用问题,在线等

高电压控制电子锁打开的问题,老师说pc机产生的信号功率太小。我想选用继电器作为控制器,应该用那种? …

查看全部问答>

EM310模块发送数据无应答,求解

在给的开发流程中是这样: AT%IPOPEN=\"TCP\",\"61.144.177.202\",3000 CONNECT AT%IPSEND=\"683100310068c90896060000027400000100e416\" %IPSEND:15 OK %IPDATA:20\"683100310068C90896060000027400000100E416\" ------------------------ ...…

查看全部问答>

STM8S和STM8L的问题

没用过ST的单片机,目前有个项目需要用到STM8L,和STM8S的片子 (1)我想知道STM8L和STM8S的外设控制是否一样,比方说STM8L的串口可以直接移值到STM8S上。 (2)STM8L的48脚封装的有没有和STM32系列的直接PIN对PIN,谢谢!…

查看全部问答>

万用表的电流档在这种情况下起了什么作用呢?

    最近在玩别人给的一块led点阵,大小是80*16的,全部使用的时候电流会到5A左右,我用的是5V的电源给他供电,电源是旧的台式机的电源,输出电流满足其要求,一开始直接把电源接到板子上,led显示不正常,会一闪一闪,并且会有吱吱的声 ...…

查看全部问答>

基础教程: 加速度计工作原理 中国频道

[media=x,500,375][/media]复制代码 [ 本帖最后由 gaoyang9992006 于 2013-8-12 21:37 编辑 ]…

查看全部问答>

TMS320F28027如何学习,如何入门,如何编程

最近看TMS320F28027芯片资料,看到真的头晕!各种资料看了也不少, 但成效一点也没有,希望各位大侠指导,如何学习,如何入门,如何编程.真不知从何下手, DSP与我之前搞的MCU完成不同.真是隔行如隔山.…

查看全部问答>