历史上的今天
今天是:2025年06月15日(星期日)
2021年06月15日 | STM32F4之USART串口通信
2021-06-15 来源:eefocus
资源: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之定时器
史海拾趣
|
美国国家半导体为高压功率转换系统提供电源管理解决方案 由于新一代的产品不断推陈出新,对功率转换的要求也越来越严格,美国国家半导体于是推出这系列全新的高压电源管理产品,以满足各大厂商客户这方面的要求。LM5000 系列芯片是一个功能齐备的电 ...… 查看全部问答> |
|
我看FPGA现在难以取代FPGA+DSP的架构,这段时间的思索总结 FPGA现在越做越大了,有些公司如Xilinx推出的FPGA都内嵌了DSP核,很多人都在讨论说FPGA会取代现在主流的复杂数字信号处理系统的架构:FPGA+DSP了,SOC片上系统的时代真的要来了,我也对这个概念很憧憬,但经过一段时间的调研后,觉得现在还不成熟, ...… 查看全部问答> |
|
图为变速器操纵装置及动力传动图解。 汽车变速器具有这样几个功用: ①改变传动比,扩大驱动轮转矩和转速的变化范围,以适应经常变化的行驶条件,同时使发动机在有利(功率较高而油耗较低)的工况下工作; ②在发动机旋转方向不变情况下 ...… 查看全部问答> |
|
毕业以后,在一家小企业上班,日子过的平平淡淡,开始把真实的自己藏在一张带着虚伪笑容的面具下面,谈不上厌倦,就是麻木了,早已经没有了当年的热血,我相信不只是我,从这个城市的灯红酒绿间穿过的每个人,都是这样的一具行尸走肉……日子已经开 ...… 查看全部问答> |




