stm32双串口相互通信
Stm32f103串口一与串口而相互通信
接线:
串口一:
USART STM32
RXD PA2
TXD PA3
GND GND
串口二:
USART STM32
RXD PA9
TXD PA10
GND GND
该程序是用keil4来编译的,stm32f103c8t6最小系统板
串口一与串口二通过串口助手可以相互发信息
usart.c的代码为:
#include "usart2.h"
/**************************************** ÎļþÃû £ºusart1.c* ÃèÊö £ºÅäÖÃUSART1 * ʵÑéƽ̨£ºMINI STM32¿ª·¢°å »ùÓÚSTM32F103C8T6* Ó²¼þÁ¬½Ó£º------------------------* | PA9 - USART1(Tx) |* | PA10 - USART1(Rx) |* ------------------------* ¿â°æ±¾ £ºST3.0.0 **********************************************************************************/#include "usart1.h"
#include <stdarg.h>int a;void USART1_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* ʹÄÜ USART1 ʱÖÓ*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); /* USART1 ʹÓÃIO¶Ë¿ÚÅäÖà */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈëGPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯GPIOA/* USART1 ¹¤×÷ģʽÅäÖà */USART_InitStructure.USART_BaudRate = 115200; //²¨ÌØÂÊÉèÖãº115200USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾ÝλÊýÉèÖãº8λUSART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλÉèÖãº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); //³õʼ»¯USART1USART_Cmd(USART1, ENABLE);// USART1ʹÄÜ
}void USART2_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* ʹÄÜ USART1 ʱÖÓ*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE); /* USART1 ʹÓÃIO¶Ë¿ÚÅäÖà */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸´ÓÃÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //¸¡¿ÕÊäÈëGPIO_Init(GPIOA, &GPIO_InitStructure); //³õʼ»¯GPIOA/* USART1 ¹¤×÷ģʽÅäÖà */USART_InitStructure.USART_BaudRate = 115200; //²¨ÌØÂÊÉèÖãº115200USART_InitStructure.USART_WordLength = USART_WordLength_8b; //Êý¾ÝλÊýÉèÖãº8λUSART_InitStructure.USART_StopBits = USART_StopBits_1; //ֹͣλÉèÖãº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); //³õʼ»¯USART1
// // ?????????
// NVIC_Configuration();
// USART_ITConfig( USART2, USART_IT_RXNE, ENABLE ); /* ???????? */USART_Cmd(USART2, ENABLE);// USART1ʹÄÜ
}/*·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý*/void UART2SendByte(unsigned char SendData)
{ USART_SendData(USART2,SendData);while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
} /*½ÓÊÕÒ»¸ö×Ö½ÚÊý¾Ý*/
unsigned char UART2GetByte(unsigned char* GetData)
{ if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET){ return 0;//ûÓÐÊÕµ½Êý¾Ý }*GetData = USART_ReceiveData(USART2); return 1;//ÊÕµ½Êý¾Ý
}
/********************************************//*·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ý*/void UART1SendByte(unsigned char SendData)
{ USART_SendData(USART1,SendData);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
} /*½ÓÊÕÒ»¸ö×Ö½ÚÊý¾Ý*/
unsigned char UART1GetByte(unsigned char* GetData)
{ if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET){ return 0;//ûÓÐÊÕµ½Êý¾Ý }*GetData = USART_ReceiveData(USART1); return 1;//ÊÕµ½Êý¾Ý
}
/*½ÓÊÕÒ»¸öÊý¾Ý£¬ÂíÉÏ·µ»Ø½ÓÊÕµ½µÄÕâ¸öÊý¾Ý*/
void UART2Test(void)
{unsigned char i = 0;unsigned char a = 0;while(1){ if(UART2GetByte(&i)){USART_SendData(USART1,i);// USART_SendData(USART1,'b');}else if(UART1GetByte(&a)){USART_SendData(USART2,a);}}
}//void USART2_IRQHandler( void ) /* ??1?????? */
//{
// unsigned char res;// if ( USART_GetITStatus(USART2,USART_IT_RXNE) != RESET ) /* ????(?????????0x0d 0x0a??) */
// {
// res = USART_ReceiveData(USART2); /* ???????? */
// USART_SendData(USART2,res);
// }//}#if 1
#pragma import(__use_no_semihosting) struct __FILE
{ int handle; }; FILE __stdout; void _sys_exit(int x)
{ x = x;
}
//fgetcÖض¨Ïò
int fputc(int ch, FILE *f)
{while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);USART_SendData(USART2,(uint8_t)ch);return ch;
}
#endif
main.c主函数的代码:
/*************************************** ÎļþÃû £ºmain.c* ÃèÊö £ºÍ¨¹ý´®¿Úµ÷ÊÔÈí¼þ£¬Ïò°å×Ó·¢ËÍÊý¾Ý£¬°å×Ó½ÓÊÕµ½Êý¾Ýºó£¬Á¢¼´»Ø´«¸øµçÄÔ¡£ * ʵÑéƽ̨£ºMINI STM32¿ª·¢°å »ùÓÚSTM32F103C8T6* ¿â°æ±¾ £ºST3.0.0 *********************************************************/#include "stm32f10x.h"
#include "usart1.h"
#include "usart2.h"
#include <stdio.h>int main(void)
{ int a;unsigned char i = 0; SystemInit(); //ÅäÖÃϵͳʱÖÓΪ 72M USART1_Config(); //USART1 ÅäÖà USART2_Config();while(1){UART2Test();}
}
运行结果:
我这里放一份参考代码自行下载:https://download.csdn.net/download/HHHSSD/16126675
stm32双串口相互通信相关推荐
- stm32学习笔记----双串口同时打开时的printf()问题
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...
- 嵌入式STM32入门之STM32基础串口通信
STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...
- [基于STM32底盘控制与ROS上层导航小车制作] 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息
系列文章目录 第一节 stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32 ...
- javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...
STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...
- STM32 —— STM32 的串口通信
STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...
- Ardunio下实现STM32的串口通信及其与Stduino的区别
摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...
- 单片机与PC机的交流———基于STM32的串口通信
STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...
- STM32之USART-串口通信(含串口实验详细解析)
STM32之串口通信 - USART(含串口实验详细解析) 开发环境:Window 10 开发工具:Keil uVision5 MDK 硬件:STM32F103 资料参考: [正点原子]STM32F1 ...
- K210学习笔记(三) K210与STM32进行串口通信,K210发STM收
文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...
最新文章
- socket.io实现在线群聊
- c#用正则表达式获得指定开始和结束字符串中间的一段文本
- c++Error:c++调用python文件提示由于找不到python3.8.dll,无法继续运行。。。
- 架设搭建开源搜索服务器 - Sphinx/Coreseek 安裝
- python的列表和元组
- JAVA复习(对象的克隆、正则表达式)
- 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)
- JAR 文件规范详解
- Java中的sql语句代码拼接问题
- OpenCV一直下载失败,怎么办?
- 计算机音乐苹果铃声,iPhone实用技巧:怎么将抖音上的背景音乐制作成手机铃声-苹果手机铃声设置...
- 西岸风格合成器-Eventide Newfangled Audio Generate 1.2.1 WiN
- 搜索功能支持大小写模糊查询
- python调用百度地图API 实现单点沿线轨迹运动
- 定了!考研人务必抓紧!2023考研全程资料免费分享微信大群!全网开启!
- WriteFile操作时返回87错误
- Spring事务不生效的原因
- MATLAB 存放字符串(循环中调用字符串)
- DMA+ADC快速采集直流无刷电机电流
- 202316读书笔记|《作家榜名著:花间集》——花半坼,雨初晴,满身香雾簇朝霞,娇艳轻盈香雪腻