两块stm32单片机串口通信讲解

这篇具有很好参考价值的文章主要介绍了两块stm32单片机串口通信讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本篇文章记录了如何使用stm32f103zet6核心板(下位机)通过串口向stm32f103zet6学习板(上位机)发送数据,stm32f103zet6学习板完成接收,并将接收到的数据显示在LCD显示屏上。

一、硬件准备及接线

硬件准备

正点原子精英STM32F103ZET6学习板一块(带2.8寸显示屏)

两个stm32单片机之间的通信,stm32f103单片机,单片机,stm32
STM32F103ZET6核心板一块
两个stm32单片机之间的通信,stm32f103单片机,单片机,stm32
电源适配器、数据线以及杜邦线若干。

接线

PA2(核心板)------------PA3(学习板)
GND(核心板)----------GND(学习板)

二、程序

上位机程序

main.c文件:

#include "sys.h"
#include "lcd.h"
#include "delay.h"
#include "usart.h"
#include "usart2.h"

int main()
{
	u8 x=0,i=0;
	delay_init();	    	 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	uart2_init(115200);
	uart_init(115200);
    LCD_Init();
	POINT_COLOR=RED;		
	
	while(1)
	{
		for(i=0;i<10;i++)
		{
			LCD_ShowxNum(20*(i+1),120,receive_buff[i],1,24,1);	//显示接收到的数据
		}
		x++;
		delay_ms(100);
		if(x == 10)
		{
			LCD_Clear(WHITE);                           //清屏
			x = 0;
		}
	}
}

usart2.c文件:

#include "sys.h"
#include "usart2.h"	
#include "stm32f10x.h"

#if EN_USART2_RX           //如果使能了接收
 	
u8 receive_buff[10] = {0};                      
u8 i=0;
u8 rx_state = 0;          //接收标志量
  
void uart2_init(u32 bound)
{
    GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	//使能GPIOA时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //使能USART2
	
	USART_DeInit(USART2);
	
	//USART2_TX   GPIOA.2
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;       //PA.2
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.2
   
    //USART2_RX	  GPIOA.3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;    //PA.3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA,&GPIO_InitStructure);     //初始化GPIOA.3  

    //Usart2 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART2_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;//串口波特率
	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(USART2,&USART_InitStructure); //初始化串口2
    USART_ITConfig(USART2,USART_IT_RXNE, ENABLE);//开启串口接受中断
    USART_Cmd(USART2,ENABLE);                    //使能串口2
}

void USART2_IRQHandler(void)//串口2中断服务程序
{
	if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)  
	{
		 if(rx_state == 1)
		 {
			 receive_buff[i] = USART_ReceiveData(USART2);
			 i++;
			 if(i == 10)
			 {
				 rx_state = 0;                   //停止接收
				 i = 0;
			 }
		 }
		 
		 if(USART_ReceiveData(USART2) == 0x0d)    
		 {
				rx_state = 1;                   //开始接收
		 } 
	}
}  											 
#endif

下位机程序

main.c文件:

#include "sys.h"
#include "usart2.h"
#include "delay.h"
#include "led.h"

u8 send_buff[10] = {0,1,2,3,4,5,6,7,8,9};

void Usart2_Sendata()
{	
	u8 i = 0;
	
	USART_SendData(USART2,0x0d);
	while( USART_GetFlagStatus(USART2,USART_FLAG_TC)!= SET);
	
	for(i = 0;i < 11;i++)
	{
		USART_SendData(USART2,send_buff[i]);
		while( USART_GetFlagStatus(USART2,USART_FLAG_TC)!= SET);
	}
}

int main(void)
{  	
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	uart2_init(115200);
	while(1)
	{
		Usart2_Sendata();       //发送数据
	}
}

三、运行结果

两个stm32单片机之间的通信,stm32f103单片机,单片机,stm32

后记

两块stm32单片机串口通信完整工程文件点此获得。文章来源地址https://www.toymoban.com/news/detail-601733.html

到了这里,关于两块stm32单片机串口通信讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32单片机(九)USART串口----第四节:USART串口实战练习(串口发送+接收)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月10日
    浏览(57)
  • 【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility

    目录 1 单片机模式配置 1.1 存储器映像 1.2 启动配置 1.3 启动模式选择 1.4 硬件展示 1.4.1 BOOT引脚配置: 1.4.2 USB转TTL 2 FlyMcu串口下载固件         2.1软件配置方式         2.2 选项字节 3 STLINK Utility 3.1 简介 3.2 下载程序流程 通过 设置选择管脚 ,对应到各种启动模式的不

    2024年01月20日
    浏览(64)
  • 使用DMA传输实现单片机高效串口转发——以STM32系列为例

    Date Author Version Note 2023.08.06 Dog Tao V1.0 1. 完成了文档的撰写。 2023.08.23 Dog Tao V1.1 1. 增加了STM32F103-USART2的DMA传输配置示例。 2. 增加了STM32F103与F407单片机的DMA控制器介绍并更改了第一章节的结构。 应用场景 在许多现实应用场景中,例如工业自动化控制、嵌入式通信设备等领域,

    2024年02月14日
    浏览(53)
  • 基于STM32单片机BOOTLOADER通过串口升级程序IAP——APP方案

                            此方法前提是你得有一个EEPROM         我用的单片机是STM32F103ZET6 , 此单片机FLASH容量为512KB; 在此单片机里面FLASH的起始地址是0X8000000,BOOT作为引导加载程序一般都是从这个地址开始,单片机一上点默认会从这个地址开始运行,所以将自己

    2024年02月04日
    浏览(63)
  • STM32单片机初学4-IIC通信(软件模拟)

    IIC ( Inter-Integrated Circuit )又称I2C(习惯读“I方C”),是 IIC Bus简称,中文名为 集成电路总线 ,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。适用于IC间的短距离数据传输。 最初的IIC通信速

    2024年02月05日
    浏览(75)
  • openmv识别物体并与单片机通信(STM32)

    感光元件 寻找色块 find_blobs函数:此函数参数较多,一般只用第一个参数就可以找到需要的色块。thresholds是颜色的阈值,是一个列表,这个列表可以有多个颜色阈值。 一个颜色阈值的结构是这样的: 画图 x,y:是坐标 size:是两侧的尺寸 color:画十字的颜色 rect_tuple 的格式是

    2023年04月08日
    浏览(53)
  • 学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

    百度百科:串口通信的概念 什么是通信? 例如U盘和电脑,我们电脑需要往U盘存东西,而U盘上只有四个触点,除去一个电源一个地,只剩下两个引脚了。此时我们坑定不能像点亮LED那样单纯的给他两个引脚上输出个高低电平就能写数据了对吧。总不至于输出一个高电平就能

    2024年02月07日
    浏览(65)
  • STM32单片机初学5-IIC通信驱动OLED屏幕

    在我上篇文章(STM32-软件模拟IIC通信)讲解了软件模拟IIC通信。这篇文章详将细讲解利用软件模拟IIC来控制0.96寸的OLED屏幕(如下图),使其显示字符串。本文将不再对IIC通信原理做详细讲解,所以对IIC通信原理不熟悉的话可以参考我上篇文章(点击上面的链接直接跳转)。

    2023年04月10日
    浏览(55)
  • 关于两个STM32F103系列单片机的蓝牙通信

       毕设做的是掌控小车,因此采用蓝牙通信作为小车和手部通信,前段时间做出实物,对其遇到的问题以及解决的方法做一些总结。一个主控芯片采用STM32F103ZET6,另一个主控芯片采用STM32F103C8T6,原因是本来准备了两个主控C8T6,不小心烧了一个。 1.两个蓝牙的配对  需要准

    2024年02月13日
    浏览(63)
  • STM32+esp8266实现单片机与服务器的WiFi通信

             源码已上传至gitee: stm32: 一些stm32模块使用经验记录 - Gitee.com https://gitee.com/lrf1125962926/stm32/tree/esp8266wifi%E9%80%9A%E4%BF%A1/         本实验采用STM32F1系列+esp8266 01s模块,采用HAL库开发。主控芯片哪个系列和型号都可以,只要有两个串口(UART或者USART,以下统称串口)

    2024年02月07日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包