STM32串口发送接收完结

编程入门 行业动态 更新时间:2024-10-27 00:27:30

STM32<a href=https://www.elefans.com/category/jswz/34/1769224.html style=串口发送接收完结"/>

STM32串口发送接收完结

前言

提示:这里可以添加本文要记录的大概内容:

目前已经学习了GPIO的输入输出,但是没有完整的显示信息,最便宜的显示就是串口。

000 -111

AVR单片机 已经学会过了,


提示:以下是本篇文章正文内容,下面案例可供参考

一、串口是什么?

1.串口的基本认识

/?spm_id_from=333.337.search-card.all.click
/?spm_id_from=autoNext
/?spm_id_from=autoNext



目标

2.STM32的串口结构

  1. 对外的就是TX RX

  2. 读写原理




USART_DR类似51单片机的SBUF

3.实现串口通信最简单的就是配置好和串口助手参数

二、使用步骤

1.开启时钟

  • GPIO的时钟
  • UART
    代码如下(示例):
	//开启串口1和GPIOA.9  10的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_USART1, ENABLE);

2. 配置引脚

  • 串口1 PA9 PA10

	//2.配置GPIOGPIO_InitStruct.GPIO_Pin=  GPIO_Pin_9;          //TXGPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStruct);   //&xGPIO_InitStruct.GPIO_Pin=  GPIO_Pin_10;         //RXGPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStruct);   //&x

3.初始化串口




代码如下(示例):

	// 3.配置USARTUSART_InitStruct.USART_BaudRate=  9600;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;USART_Init( USART1, &USART_InitStruct);

4. 串口使能

USART_Cmd(USART1, ENABLE);

5. 串口如何发送?

5.1发送单个字符

USART_SendData(USART1, 'A');

5.2 发送多个字符

// 5. 发送	USART_SendData(USART1, 'A');//加入等待发送完成// 没发送完成就一直是0,发送完成就是1while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));//while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));//while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));USART_SendData(USART1, 'B');while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));USART_SendData(USART1, 'C');while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));USART_SendData(USART1, 'D');while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));USART_SendData(USART1, 'E');while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));USART_SendData(USART1, 'F');while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));

5.3 写成一个发送字符串的函数

字符串最后一位就是 0,NULL


U8 ta[]="123";send_string(ta); //这时候ta代表装着 123数据的首地址,1的地址,*p就是1,p就是1的地址也首地址,ta;void send_string(u8 *p)
{while(*p !=0){USART_SendData(USART1, *p);while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));p++;}	
}

5.4 发送多类型,采用printf()

需要重定向一个函数,让printf 发送到串口而不是C语言里面的控制台
加头文件
#include “stdio.h”

int fputc(int ch,FILE *f)
{USART_SendData(USART1, (u8)ch);while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));return ch;
}

单独写这个不能发送
要勾选

printf("STM32简答吗?");
printf("STM32简答吗?\r\n");printf("STM32简答吗?能考%d 分?\r\n",60);

6. 串口如何接收?

串口中断数据接收有2种方法,为了节省资源,一般采用中断的方法

  1. 查询
  2. 中断

6.1 查询的方法,在主函数不断获取标志位,

 void main(){while(1){if(串口接收完成){temp= 接收函数}}
}

6.2 中断获取数据的方法

  • 步骤
  1. 中断分组
  2. 配置NVIC优先级管理
  3. 开启串口接收中断
  4. 写中断服务函数
    第一、二步
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=  1;NVIC_Init(&NVIC_InitStruct);

第三步


USART_ITConfig( USART1, USART_IT_RXNE, ENABLE);

第四步

void USART1_IRQHandler()   //中断函数
{u16 temp;if(USART_GetITStatus( USART1, USART_IT_RXNE))  //判断是否是接收完成中断{temp=USART_ReceiveData(USART1);      //接收数据USART_SendData(USART1, temp);       //发送收据USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清楚接收完成中断}
}

7.是否要中断?要中断有什么好处

在这里插入代码片  程序框架# 三、测试## 1. 硬件条件![在这里插入图片描述](.png)
![在这里插入图片描述](.png)
![在这里插入图片描述](.png)
![在这里插入图片描述](.png)## 2. 测试成功发送了一个字符![在这里插入图片描述](.png)
## 3.发送多个字符
![在这里插入图片描述](.png)如何解决问题![在这里插入图片描述](.png)![在这里插入图片描述](.png)
解决方法:![在这里插入图片描述](.png)成功的案列
![在这里插入图片描述](.png)# 总结
实现对话,发送名字,学号,指定三盏灯的状态

更多推荐

STM32串口发送接收完结

本文发布于:2023-12-03 13:49:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1656046.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:串口

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!