历史上的今天
今天是: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);
}
上一篇:基于颜色识别的智能小车集群控制
下一篇:分享STM32时钟系统
史海拾趣
|
随着指挥调度和应急通信需求的增长,数字集群通信系统的重要性日益显著,数字集群通信在安全保障、会务组织、公安、消防、交通、急救等应急部门的联合调度和指挥等任务中发挥越来越重要的作用。 所谓集群通信是指系统可用信道可为系统中全体用 ...… 查看全部问答> |
|
本人太穷买不起1000+的板子,现请教高手介绍一款纯软件模拟硬件的软件,可以下载啊,跑程序啊 不知道有没有这种软件 [ 本帖最后由 frozenrain 于 2008-7-7 17:40 编辑 ]… 查看全部问答> |
|
公司要我做一个应用 程序去调用 驱动 程序中的函数,自己查了资料 现在还是没法入手,请各位大哥帮帮忙,应用程序用VC做,驱动程序以经包在系统中下到板子中了,系统是wince5.0, 驱动程序是看门狗,硬件2440… 查看全部问答> |
|
在给的开发流程中是这样: AT%IPOPEN=\"TCP\",\"61.144.177.202\",3000 CONNECT AT%IPSEND=\"683100310068c90896060000027400000100e416\" %IPSEND:15 OK %IPDATA:20\"683100310068C90896060000027400000100E416\" ------------------------ ...… 查看全部问答> |
|
没用过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芯片资料,看到真的头晕!各种资料看了也不少, 但成效一点也没有,希望各位大侠指导,如何学习,如何入门,如何编程.真不知从何下手, DSP与我之前搞的MCU完成不同.真是隔行如隔山.… 查看全部问答> |




