STM32F4之USART串口通信

发布者:InnovateMind最新更新时间:2021-06-15 来源: eefocus关键字:STM32F4  USART  串口通信 手机看文章 扫描二维码
随时随地手机看文章

资源:STM32F407有2个UART(通用异步收发器),4个USART(通用异步/同步收发器)


在STM32F407ZET6的手册上有描述,

这些接口所对应的引脚如下:

在这里我们选用串口1进行简单编程:


实现功能吐下:


1.每秒发送一个数字


2.进行数据回传


其所要配置的内容如下:


1.GPIO的时钟使能


2.声明一个GPIO结构体变量,进行定义并进行初始化,主要是开启复用功能


3.将GPIO复用为何,将IO口功能配置为USART功能


4.USART1的时钟进行使能


5.声明一个USART结构体变量,进行定义并进行初始化,设置其波特率,停止位,字长,是否硬件流控制,收发模式,


6.设置中断优先组


7.声明一个中断优先组变量,进行定义并进行初始化,设置什么为中断源,其抢占优先组,响应优先组的值


8.配置串口中断源为哪个:是接收中断还是发送中断


9.使能USART1


int main(void)

{

 

    //配置systick时钟的时钟源

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);

if(SysTick_Config(SystemCoreClock/1000)!=0)

{

}

 

//配置中断优先分组

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//声明一个GPIO结构体变量

GPIO_InitTypeDef GPIO_InitStructure;

//声明一个USART结构体变量

USART_InitTypeDef USART_InitStructure;

//使能USART1外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

//使能GPIO外设时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

//定义GPIO结构体变量,复用该IO口作为串口

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9 |GPIO_Pin_10;//两个IO口

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;         //复用模式

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;    //50MHz

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;    //推挽输出

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;    //上拉

GPIO_Init(GPIOA,&GPIO_InitStructure);

//定义USART结构体变量

USART_InitStructure.USART_BaudRate=115200;

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

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

USART_InitStructure.USART_Parity=USART_Parity_No;    //无校准

USART_InitStructure.USART_StopBits=USART_StopBits_1; //1位停止位

USART_InitStructure.USART_WordLength=USART_WordLength_8b;  //字长为8

//明确IO为何功能进行配置

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

//串口进行初始化

USART_Init(USART1,&USART_InitStructure);

    //串口中断优先组结构体变量声明

NVIC_InitTypeDef NVIC_InitStructure_usart;

//定义该串口中断优先组分组

NVIC_InitStructure_usart.NVIC_IRQChannel=USART1_IRQn;

NVIC_InitStructure_usart.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStructure_usart.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级设置

NVIC_InitStructure_usart.NVIC_IRQChannelSubPriority=0x02; //响应优先级设置

//初始化该优先级分组

NVIC_Init(&NVIC_InitStructure_usart);

//配置串口接收中断

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

//使能串口1

USART_Cmd(USART1,ENABLE);

     

while(1)

{

    //定时发送数据的功能

USART_SendData(USART1,9);

delay_sys(1000);

}

 

}

 


//进行数据的回传

void USART1_IRQHandler(void)

{

u8 res;

if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否有接收中断

{

res=USART_ReceiveData(USART1);

USART_SendData(USART1,res);

}

 

}

//延时功能

int delaytime;

void delay_sys(unsigned int time)

{

delaytime=time;

while(delaytime!=0);//延时

}

 


//systick中的中断函数,对其进行编写

/**

  * @brief  This function handles SysTick Handler.

  * @param  None

  * @retval None

  */

void SysTick_Handler(void)

{

 

if(delaytime!=0)

{

delaytime--;

}

}


最后可以实现所要求的功能。

关键字:STM32F4  USART  串口通信 引用地址:STM32F4之USART串口通信

上一篇:STM32F4之定时器
下一篇:STM32F407之如何选择外设时钟的函数

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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