利用STM32 的串口来发送和接收数据实验
0目标
1 STM32 串口简介
2 硬件设计
3 软件设计
4 下载验证
1) 串口时钟使能, GPIO 时钟使能
2) 串口复位
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数
注:对于复用功能的 IO,我们首先要使能 GPIO 时钟,然后使能复用功能时钟,同时要把 GPIO 模式设置为复用功能对应的模式。
2 硬件设计
- <span style="font-size:18px;"></span>
- void uart_init(u32 bound){
- //GPIO端口设置
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
- //USART1_TX PA.9
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- //USART1_RX PA.10
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- //Usart1 NVIC 配置
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
- NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
- //USART 初始化设置
- USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
- USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
- USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
- USART_Init(USART1, &USART_InitStructure); //初始化串口
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
- USART_Cmd(USART1, ENABLE); //使能串口
- }
LED.c内容:
- <span style="font-size:18px;">#include "led.h"
- //初始化PA0为输出口.并使能这个口的时钟
- //LED IO初始化
- void LED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA端口时钟
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //LED0-->PA0 端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
- GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA0
- GPIO_SetBits(GPIOA,GPIO_Pin_0); //PA0 输出高
- }
- </span>
led.h:
- <span style="font-size:18px;">#ifndef __LED_H
- #define __LED_H
- #include "sys.h"
- #define LED0 PAout(0)// PA0
- void LED_Init(void);//初始化
- #endif</span>
主函数:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- int main(void)
- {
- u8 t;
- u8 len;
- u16 times=0;
- delay_init(); //延时函数初始化
- NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart_init(9600); //串口初始化为9600
- LED_Init(); //LED端口初始化
- while(1)
- {
- if(USART_RX_STA&0x8000)
- {
- len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
- printf("\r\n您发送的消息为:\r\n\r\n");
- for(t=0;t<len;t++)
- {
- USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
- while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
- }
- printf("\r\n\r\n");//插入换行
- USART_RX_STA=0;
- }else
- {
- times++;
- if(times%5000==0)
- {
- printf("\r\n口袋里的超超 串口实验\r\n");
- printf("真JB帅\r\n\r\n");
- }
- if(times%200==0)printf("请输入数据,以回车键结束\n");
- if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
- delay_ms(10);
- }
- }
- }
4 下载验证
利用STM32 的串口来发送和接收数据实验相关推荐
- 串口通信——发送和接收数据(8位和16位数据之间的转换)
1. 实验目的 1.发送两个字节数据,就是16位的数据,每一次发送8位,发送两次,这里要进行数据的拆分,如发送一个0XFF56,接收得到的也是FF56(16进制显示); 2.接收两个字节的数据(这里通 ...
- C#与松下PLC串口通讯发送,接收数据
记录与学习 第一次跟PLC打交道,C#与松下plc交互读写功能,很多东西都是自己在网上找的,整理了下做个记录 引入"Panasonic.dll"文件 下载地址 百度盘百度网盘 请 ...
- STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷
STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷 http://www.openedv.com/thread-63849-1-1.html 实现思路:采 用STM32F103的串口1,并配 ...
- 串口接收标志位语句_如何获取串口的发送和接收的标志位?
我用C#写了一个小的串口调试软件,并在51的板子上调试成功了,但是换到STM32F103上不行了,由于刚学STM32,还很不熟悉,所以还请各位能否告诉我如何获取串口的发送和接收的标志位.或是帮我把下面 ...
- 【HAL库】STM32F407ZGT6实现串口中断发送和接收
** [HAL库]STM32F407ZGT6实现串口中断发送和接收 (保姆级教写代码1) ** 前言 根据近期所做的项目,想给大家分享一些有关STM32的各类通信方式的代码教程,都是基于STM32HA ...
- cubemx串口的发送与接收_串口收发模块设计
串口收发模块设计 作者:巩文宏 公众号:数字积木 该串口收发模块有串口发送模块,串口接收模块,波特率生成模块,发送数据fifo模块,接收数据的fifo模块组成. 默认配置下,要求输入的参考时钟为50M ...
- hal 双串口同时接收丢失数据_【STM32Cube_06】使用USART发送和接收数据(查询模式)...
寻求更简洁舒适的阅读体验,请移步Mculover666的个人博客: [STM32Cube_06]使用USART发送和接收数据(查询模式)www.mculover666.cn 本篇文章主要介绍如何使用 ...
- STM32L152RE实现串口发送及接收数据
本文主要讲解用keil软件实现USART串口发送及接收数据,默认读者keil环境已经配好,且头文件已正确引入,如出现编译错误以及st-link下载问题,请自行百度解决. 串口发送和接收数据是一件看起来 ...
- 51单片机串口通信发送以及接收代码详解1
#include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...
最新文章
- 看看人家 SpringBoot 的全局异常处理,多么优雅...
- 新版本springboot-整合多数据源拆分思路
- eclipse常用以及实用的快捷键
- java 短链接实现方案_java利用百度短网址api实现URL长短互换工具类分享
- 网络——获取Web数
- Android集成JPush(极光推送)
- 利用salt防范MD5字典攻击
- E-prime问题(安装.net3.5)
- Winrunner经验总结
- 成都以前的计算机学校图片,成都计算机中职图片介绍
- 中国石油大学计算机第二阶段在线作业,中国石油大学计算机应用基础第二阶段在线作业答案2018年...
- Android PackageManagerService(三)pm命令安装流程详解
- 解析Hl7消息,将消息可视化
- 前沿 | 社区问答系统及相关技术
- web项目034-----JS模版引擎
- 北京2008年奥运会体育图标
- java登录界面代码
- HDU 5473(There was a kingdom-凸包+dp)
- User Interface Process(UIP) Application Block 2.0 研究总结
- Win7开启wifi热点