蓝桥杯_嵌入式:串口通讯(库函数)

目录

一、引脚图:

二、部分代码:

1.usart.h:

2、usart.c:

3、main.c:

总结:



一、引脚图:

 注意:我们一般使用的USART2为PA3、PA2

二、部分代码:

1.usart.h:

#ifndef __USART_H
#define __USART_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"


void usart2_Init(void);
void SendString(char *s);

#endif

2、usart.c:

#include "usart.h"
#include "stdio.h"

void usart2_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	USART_InitTypeDef USART_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	
	  //GPIO端口设置
	  //USART1_RX	  GPIOA.3初始化
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//USART1_TX   GPIOA.2
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;  	//复用推挽输出
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	   //USART 初始化设置
	USART_InitStruct.USART_BaudRate=115200;  //串口波特率
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;  //收发模式
	USART_InitStruct.USART_Parity=USART_Parity_No;    //无奇偶校验位
	USART_InitStruct.USART_StopBits=USART_StopBits_1;//一个停止位
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;//字长为8位数据格式
	USART_Init(USART2,&USART_InitStruct);//初始化串口2
	
	USART_Cmd(USART2,ENABLE);//使能串口12
	
	USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启串口接受中断
	  
		//Usart1 NVIC 配置
	NVIC_InitStruct.NVIC_IRQChannel=USART2_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
	NVIC_Init(&NVIC_InitStruct);
}

void SendString(char *s)
{
	while(*s)
	{
		USART_SendData(USART2,*s++);
		while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)//USART_FLAG_TC 表示传输完毕;USART_FLAG_TXE表示发送缓冲区空
		{}
	}
}


int fputc(int ch, FILE *f)          //重定义fputc函数 
{

  USART_SendData(USART2, (uint8_t) ch);
  while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
  {}

  return ch;
}

u8 rx_buf[10];
u8 rx_count=0;
void USART2_IRQHandler(void)    //串口2中断服务程序
{
	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //接收中断
	{
		USART_ClearITPendingBit(USART2,USART_IT_RXNE);
		rx_buf[rx_count++]=USART_ReceiveData(USART2);
		printf("%c\n",rx_buf[rx_count]);
		if(rx_count>=5)
		{
			rx_count=0;
		}
	}
}

3、main.c:

#include "stm32f10x.h"
#include "lcd.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "stdio.h"

u32 TimingDelay = 0;

void Delay_Ms(u32 nTime);

int main(void)
{
	
	u8 key_value;
	u8 i=0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
	SysTick_Config(SystemCoreClock/1000);
  STM3210B_LCD_Init();
	LCD_Clear(Green);
	LCD_SetBackColor(Black);//2
	LCD_SetTextColor(White);//3
	
	led_Init();
	key_Init();
	usart2_Init();

	while(1);

}


void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

该程序通过串口调试助手输入字符等于接收端收到的相同字符串


总结:

这里对蓝桥杯嵌入式的串口通信的主要代码做了部分描述,在串口通信的学习过程中注意同时需要配置GPIO、NVIC和USART。

初学者一定要实际操作烧入代码检查目标实现程度

文章若出现什么问题,谢谢及时反馈。


点个赞在走吧!!!!

版权声明:本文为CSDN博主「0x小创ii」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_53512119/article/details/122747567

0x小创ii

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【蓝桥杯】串口通信详解附双串口代码

备赛目录 IAP15F2K61S2单片机拥有两个全双工串口通信接口(串口1和串口2)1、串口相关寄存器 每个串口都有2个数据缓冲器、一个移位寄存器、一个串行控制器和一个波特率发生器 1.1数据缓冲器SBUF 这是

四足机器狗——12自由度舵机狗DIY(一)

文章目录 前言 一、初步了解四足结构 1.1.2串联机构 1.2 四足关节配置 二、结构方案选择及舵机选型 2.1并联与串联机构的选型 2.2 四足关节配置的选择 2.3 电机选型(有经济基础的建议尝试) 2.4 舵