407串口01发送

2024-06-24 09:36
文章标签 串口 01 发送 407

本文主要是介绍407串口01发送,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验一:
工程。

链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 
提取码:2176

在这里插入图片描述

串口1的使用。发送功能。
单片机发送信息到电脑。
通过串口进行通信。

首先单片机这边。
单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。
单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,对牛弹琴。

打开串口助手,看下格式。

格式包括波特率,停止位,数据位和校验位。电脑端的串口助手(我们这里使用XCOM的串口助手)默认这个配置,单片机也这么配置一下。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

看到上述的串口初始化的步骤主要是
1、初始化端口的时钟,串口1的时钟,都要打开,因为我们需要用到芯片的该个功能,因此必须打开对应时钟。
2、由于端口PA9和PA10默认是IO模式,这个我们配置为端口复用模式,切换到串口1功能;
3、串口1的具体格式的初始化。设置通信格式,和要通话端的格式一致。
4、使能串口,清空串口对应的中断标记位。允许发生中断。
5、在其他地方或者这个函数里面,我们可以设置串口1的中断优先级等,配置一下。这里在前面配置了。

在这里插入图片描述

在这里插入图片描述

初始化函数用PA9和PA10作为串口使用。
可以用stm32CubeMX软件查看。
如何对stm32查看IO功能。-CSDN博客
在这里插入图片描述
在这里插入图片描述

看到PA9和PA10分别是串口1的TXD发送和RXD接收引脚。
这里我们需要用到一个USB-TTL模块,我们可以自学习一下232电平,TTL电平等。记得发送和接收对接。才能正常收发数据。
在这里插入图片描述

这里我们只是对发送功能进行讲解,因此接收的中断先不讲解。

使用这个的时候,先在工程中确认包括usart.c文件。然后用里面的额初始化函数进行初始化。注意波特率。
然后再main.c中的main函数里面,进行include头文件,然后进行串口初始化。

这里讲解一下printf函数。printf函数,我们一般在一开始学习C语言的时候,就讲解了。那时候我们是将printf函数输出到电脑的屏幕中,查看一下信息,比如变量,字符串啊等等信息。这里我们用printf函数,也是实现这个功能。
不过单片机里面执行printf函数,需要多一个重定向的步骤。告诉单片机,我们需要在单片机的那个串口printf出去,要重定向到对应的单片机串口才行。
在这里插入图片描述

所以在usart.c文件里面。看到这个函数里面有串口1,因为我们的PA9和PA10就是串口1,定向到这个,我们的串口才能输出信息打印出去。
你可以配置串口3,然后这里改为串口3,那么printf就定向到串口3去了,同理也一样。
在这里插入图片描述

我们可以修改一下这个函数,改为大写的Printf函数,或者多一个函数的形参,后面我们再讲解。

在库中的stm32f4xx_usart.c中,包括了一个发送字节,一个是接收字节的函数。这是库函数的东西,主要是将缓冲区的数据读取出来或者是发送出去。

在这个函数基础上,我们在sys.c中添加3个函数,一个是发字节,一个是发字符串,一个是自定义大写的Printf函数。注意在sys.h中要添加对应函数的声明。
//**********************************************************************
// /* 发送一个字节数据到USART */

void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{/* 发送一个字节数据到USART */USART_SendData(pUSARTx,ch);	/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	//	while((pUSARTx->SR&0X40)==0);//循环发送,直到发送完毕   
//			pUSARTx->DR = (u8) ch;   
//	
}//*******************************************************************//字符串发送函数
void Usart_SendString( USART_TypeDef * pUSARTx,char *buffertemp)		
{uint8_t i=0;while(1){if(buffertemp[i]!='\0'){USART_SendData(pUSARTx,buffertemp[i]);  //发送一个字节while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE)==RESET){};//等待发送结束i++;}else return ;}
}

/*

/*


  • 函 数 名: Printf
  • 功能说明: 可变参数重定义Printf函数
  • 形 参: 1.串口号 2.char* fmt,… 格式化输出字符串和参数
  • 返 回 值: 无

*/

#define    USART_SENDBUFFLEN     256          //定义打印的字符串数组长度char g_USART_SendBuff[USART_SENDBUFFLEN];     //用于打印的字符串数组void Printf(USART_TypeDef* USARTx, char* fmt, ...)
{u16 i = 0;  		va_list ap;                                  //清空下标memset(g_USART_SendBuff,0,USART_SENDBUFFLEN); //清空字符数组//可变参数列表变量(对象)va_start(ap,fmt);                         //指明char*类型的fmt参数后面的才是可变参数的开始vsprintf(g_USART_SendBuff,fmt,ap);        //使用参数列表发送格式化输出到字符串va_end(ap);	                              //清空参数列表变量(对象)while(g_USART_SendBuff[i])                //如果字符串数组为NULL则退出打印{while((USARTx->SR&0X40)==0);USARTx->DR = g_USART_SendBuff[i++];}
}

这里可以把这个USART_SENDBUFFLEN改为100,一般发送不会发送太多数据,100个字节基本够用了。

在SYS.h中添加对应的函数声明。

准备步骤充分了,我们就可以使用里面的函数,发送信息。

注意串口4和串口5是没有S的,少了一个字母。具体可以自己在学习。

在这里插入图片描述
#include “sys.h”
#include “usart.h”
#include “delay.h”
#include “led.h”
#include “beep.h”
int main(void)
{
u16 i=0;
int x;
float y;
Nvic_Init(NVIC_PriorityGroup_4);//中断分组第四组 高优先打断低优先
Set_Nvic_Irq(USART1_IRQn,0,3);//设置串口1的中断等级;
Delay_Init();//延时函数默认中断优先级是最低的。
LED_Init();//LED灯初始化
BEEP_Init();//蜂鸣器初始化
uart1_init(115200);//设置串口1的波特率是115200
//uart3_init(115200);//设置串口1的波特率是115200

Usart_SendByte(USART1,'a');//测试单字节发送函数
Usart_SendByte(USART1,'b');//测试单字节发送函数
Usart_SendString(USART1,"tab\r\n");//测试字符串发送函数
printf("hello world\r\n");//这个也能用,测试printf函数
printf("aaa=1,i=%d\r\n",i);//这个也能用,测试printf函数
Printf(USART1,"xxx=0,i=%d\r\n",i);//这个也能用,测试大写的Printf函数
//Printf(USART3,"xxx=0,i=%d\r\n",i);//这个也能用,测试大写的Printf函数
while(1)
{printf("x=%3d\r\n",x);delay_ms(500);printf("y=%0.2f\r\n",y);delay_ms(500);
}

}

#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{u16 i=0;int x;float y;Nvic_Init(NVIC_PriorityGroup_4);//中断分组第四组 高优先打断低优先Set_Nvic_Irq(USART1_IRQn,0,3);//设置串口1的中断等级;Delay_Init();//延时函数默认中断优先级是最低的。LED_Init();//LED灯初始化BEEP_Init();//蜂鸣器初始化uart1_init(115200);//设置串口1的波特率是115200//uart3_init(115200);//设置串口1的波特率是115200Usart_SendByte(USART1,'a');//测试单字节发送函数Usart_SendByte(USART1,'b');//测试单字节发送函数Usart_SendString(USART1,"tab\r\n");//测试字符串发送函数printf("hello world\r\n");//这个也能用,测试printf函数printf("aaa=1,i=%d\r\n",i);//这个也能用,测试printf函数Printf(USART1,"xxx=0,i=%d\r\n",i);//这个也能用,测试大写的Printf函数//Printf(USART3,"xxx=0,i=%d\r\n",i);//这个也能用,测试大写的Printf函数while(1){printf("x=%3d\r\n",x);delay_ms(500);printf("y=%0.2f\r\n",y);delay_ms(500);}
}

这篇关于407串口01发送的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089771

相关文章

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口