14、stm32最小系统----串口通信实验

本文详细介绍了在STM32单片机上实现串口通信的方法,包括时钟使能、GPIO配置、USART初始化、中断设置等关键步骤。通过具体代码示例,展示了如何进行数据收发及中断处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在最小库函数模板上开发。
方法步骤:
1、串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
2、GPIO端口模式设置:GPIO_Init();
3、串口参数初始化:USART_Init();
4、开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
5、使能串口:USART_Cmd();
6、编写中断处理函数
7、串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
8、串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

main.c

#include "stm32f10x.h"
void My_USART1(void)
{
	GPIO_InitTypeDef  GPIO_InitStrue;
	USART_InitTypeDef USART1_InitStrue;
	NVIC_InitTypeDef	NVIC_InitStrue;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//打开GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//打开USART1时钟
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//上拉输入
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;//第九引脚
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;	//输出速度配置	
	GPIO_Init(GPIOA,&GPIO_InitStrue);//将配置数据写入寄存器
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;//第10引脚
	//GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;//由于是输入,不需要配置速度	
	GPIO_Init(GPIOA,&GPIO_InitStrue);//将配置数据写入寄存器
	
	USART1_InitStrue.USART_BaudRate=115200;//配置波特率
	USART1_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//配置硬件流,这里设置无
	USART1_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//模式为允许输入和输出
	USART1_InitStrue.USART_Parity=USART_Parity_No;//不设置奇偶校验位
	USART1_InitStrue.USART_StopBits=USART_StopBits_1;//配置停止位为1位
	USART1_InitStrue.USART_WordLength=USART_WordLength_8b;//配置传输的字长
	
	USART_Init(USART1,&USART1_InitStrue);	//将串口相关数据写入寄存器
	USART_Cmd(USART1,ENABLE);	//使能寄存器
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//接收中断
	
	NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
	NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
	
	NVIC_Init(&NVIC_InitStrue);
}
int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	My_USART1();
	while(1);

}

void USART1_IRQHandler(void)
{
	u8 res;
	if(USART_GetITStatus(USART1,USART_IT_RXNE))
	{
		res=USART_ReceiveData(USART1);
		USART_SendData(USART1,res);
	}

}

在这里插入图片描述

单片机USB—TTL转换器
+3.3v+3.3V
GNDGND
PA10TXD
PA9RXD

在这里插入图片描述
实验现象!
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值