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双串口相互通信相关推荐

  1. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  2. 嵌入式STM32入门之STM32基础串口通信

    STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...

  3. [基于STM32底盘控制与ROS上层导航小车制作] 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息

    系列文章目录 第一节 stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32 ...

  4. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  5. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  6. Ardunio下实现STM32的串口通信及其与Stduino的区别

    摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...

  7. 单片机与PC机的交流———基于STM32的串口通信

    STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...

  8. STM32之USART-串口通信(含串口实验详细解析)

    STM32之串口通信 - USART(含串口实验详细解析) 开发环境:Window 10 开发工具:Keil uVision5 MDK 硬件:STM32F103 资料参考: [正点原子]STM32F1 ...

  9. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

    文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...

最新文章

  1. socket.io实现在线群聊
  2. c#用正则表达式获得指定开始和结束字符串中间的一段文本
  3. c++Error:c++调用python文件提示由于找不到python3.8.dll,无法继续运行。。。
  4. 架设搭建开源搜索服务器 - Sphinx/Coreseek 安裝
  5. python的列表和元组
  6. JAVA复习(对象的克隆、正则表达式)
  7. 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)
  8. JAR 文件规范详解
  9. Java中的sql语句代码拼接问题
  10. OpenCV一直下载失败,怎么办?
  11. 计算机音乐苹果铃声,iPhone实用技巧:怎么将抖音上的背景音乐制作成手机铃声-苹果手机铃声设置...
  12. 西岸风格合成器-Eventide Newfangled Audio Generate 1.2.1 WiN
  13. 搜索功能支持大小写模糊查询
  14. python调用百度地图API 实现单点沿线轨迹运动
  15. 定了!考研人务必抓紧!2023考研全程资料免费分享微信大群!全网开启!
  16. WriteFile操作时返回87错误
  17. Spring事务不生效的原因
  18. MATLAB 存放字符串(循环中调用字符串)
  19. DMA+ADC快速采集直流无刷电机电流
  20. 202316读书笔记|《作家榜名著:花间集》——花半坼,雨初晴,满身香雾簇朝霞,娇艳轻盈香雪腻

热门文章

  1. 英语总结-14年4月
  2. 当下企业信息化的痛点以及相关解决方案
  3. 在vmware上运行ecos
  4. Python 基础 之 Pycharm 实现简单的名片管理系统
  5. Linux 图形化和命令行安装达梦数据库
  6. 领英怎么用多个账号一起开发客户?进阶知识
  7. Q1营收预期内,但趣头条持续盈利挑战大
  8. 【算法设计zxd】第3章迭代法04 线性规划
  9. CPA八--资本公积(转载)
  10. vue@2.5.2 对等的vue-template-compiler【Vue】