使用两块32板子,主要功能为:板子1通过串口向板子2发送信号,板子接收成功后将点亮对应的LED灯。

线路连接:

板子1的 TX(PA2)引脚——>板子2的RX(PA3)引脚

板子1的 RX(PA3)引脚——>板子2的TX(PA2)引脚

若两块板子都单独接电则需用一根杜邦线连接两块板子的GND引脚。(我两块板子都用的电脑供电,所以不用额外使用杜邦线连接。)

以下为板子1的usart.c

#include "bsp_usart.h"static void USART_NVIC(void)
{NVIC_InitTypeDef NVIC_InitStruct;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);
}void USART_gpionInit(void)
{GPIO_InitTypeDef       GOIO_InitStruct;USART_InitTypeDef   USART_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);// 初始化 串口对应IO口  TX-PA2  RX-PA3GOIO_InitStruct.GPIO_Pin = GPIO_Pin_2;GOIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GOIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GOIO_InitStruct);GOIO_InitStruct.GPIO_Pin = GPIO_Pin_3;GOIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA,&GOIO_InitStruct);// 初始化 串口模式状态USART_InitStruct.USART_BaudRate =115200 ;// 波特率USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 硬件流控制USART_InitStruct.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;// 发送 接收 模式都使用USART_InitStruct.USART_Parity = USART_Parity_No;// 没有奇偶校验USART_InitStruct.USART_StopBits = USART_StopBits_1;// 一位停止位USART_InitStruct.USART_WordLength = USART_WordLength_8b;// 每次发送数据宽度为8位USART_Init(USART2,&USART_InitStruct);//中断USART_NVIC();USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);USART_Cmd(USART2,ENABLE);//使能串口
}/*****************  发送一个字节 **********************/
void Usart_SendByte( USART_TypeDef * pUSART2, uint8_t ch)
{/* 发送一个字节数据到USART */USART_SendData(pUSART2,ch);/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSART2, USART_FLAG_TXE) == RESET);
}/****************** 发送8位的数组 ************************/
void Usart_SendArray( USART_TypeDef * pUSART2, uint8_t *array, uint16_t num)
{uint8_t i;for(i=0; i<num; i++){/* 发送一个字节数据到USART */Usart_SendByte(pUSART2,array[i]); }/* 等待发送完成 */while(USART_GetFlagStatus(pUSART2,USART_FLAG_TC)==RESET);
}/*****************  发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSART2, char *str)
{unsigned int k=0;do {Usart_SendByte( pUSART2, *(str + k) );k++;} while(*(str + k)!='\0');/* 等待发送完成 */while(USART_GetFlagStatus(pUSART2,USART_FLAG_TC)==RESET){}
}/*****************  发送一个16位数 **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSART2, uint16_t ch)
{uint8_t temp_h, temp_l;/* 取出高八位 */temp_h = (ch&0XFF00)>>8;/* 取出低八位 */temp_l = ch&0XFF;/* 发送高八位 */USART_SendData(pUSART2,temp_h);   while (USART_GetFlagStatus(pUSART2, USART_FLAG_TXE) == RESET);/* 发送低八位 */USART_SendData(pUSART2,temp_l);  while (USART_GetFlagStatus(pUSART2, USART_FLAG_TXE) == RESET);
}///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口 */USART_SendData(USART1, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);      return (ch);
}///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);return (int)USART_ReceiveData(USART2);
}void SysTick_Handler(void)
{
}void USART2_IRQHandler(void) // 串口2中断服务函数
{uint8_t ucTemp;if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET)// 中断标志——发送完成中断{ucTemp = USART_ReceiveData(USART2);USART_SendData(USART2,ucTemp);USART_ClearITPendingBit(USART2,USART_IT_RXNE);}
}

main.c

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
#include "bsp_led.h"
#include "bsp_usart.h"int main(void)
{LED_GPIO_Config();USART_gpionInit();// 来到这里的时候,系统的时钟已经被配置成72M。Usart_SendString( USART2,"这是一个串口中断接收回显实验\n");while(1){if(Key_Scan(GPIOA,GPIO_Pin_0)==1){Usart_SendByte( USART2,100 );//d}}}

当检测到按键按下的时候,板子1会发送一个8位的数据(这里大家可以自行设定)

按键的代码

#include "bsp_key.h"void GPIO_keyconfig(void)
{GPIO_InitTypeDef   GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0 ;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;GPIO_Init(GPIOA ,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;GPIO_Init(GPIOC ,&GPIO_InitStructure);}
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{           if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 1 )  {     while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 1);   return  1;   }elsereturn 0;
}

以下为板子2的main.c(我使用的两块板子型号一样,所以对应的串口配置不用更改)

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>#include "bsp_usart.h"uint8_t a;
int main(void)
{LED_GPIO_Config();USART_gpionInit();// 来到这里的时候,系统的时钟已经被配置成72M。printf("串口检验");Usart_SendString( USART2,"这是一个串口中断接收回显实验\n");while(1){a =  USART_ReceiveData(USART2);if(a==100){LED1_TOGGLE;//红色}else{LED2_TOGGLE;}//绿色,如果成功接受信号,则变为黄色(绿+红)}}

这里将板子2接收到的值给a,再判断两个的值(这里偷懒便没有考虑过板子接收到的数据型号)。如果板子2没有接收到板子1的数据,则亮绿灯,如果接受到了则会亮黄色灯(因为打开了绿灯的GPIO没有关闭,所以后面打开红灯的GPIO会亮黄灯)。

STM32 用串口连接两个板子相关推荐

  1. c51单片机led奇数偶数亮_两STM32单片机串口通讯实验

    一.实验思路 连接两个STM32单片机的串口引脚,单片机A进行发送,单片机B进行接收.单片机B根据接收到单片机A的指令来点亮或熄灭板载LED灯,通过实验现象来验证是否通讯成功. 二.实验器材 两套ST ...

  2. 通过网络使用其他计算机串口,串口如何连接两台电脑?两台电脑不能通过网线,仅能通过串口或者并口连接...

    串口联机线的连接方法 串口联机线主要用于直接把两台电脑的com口连接.比较早一点的AT架构的电脑的串口有为9针,和25针两种,现在的ATX架构的电脑两个串口全部是9针.于是联机线就分为3种(9针对9针 ...

  3. stm32串口连接MC20输入AT指令无反应原因查找

    串口连接采用官方手册推荐的电阻分压方法. 1.单片机每秒发送一次AT指令 2.示波器检查RX和TX端信号,MC20输出是2.8V,STM32是3.3V 3.发现每秒钟单片机TX线发送信号逻辑正常,但是 ...

  4. # STM32系列-串口-uart-软件引脚内部上拉 或者 外部电阻上拉-原因问题的搜寻

    # STM32系列-串口-uart-引脚上拉-原因问题的搜寻 前言-(知道一个结论正确,也要知道它为什么正确) 问题描述 查找过程 (1)上网查资料 (2)请教大佬 (3)查代码-找手册-验证 一些参 ...

  5. 迪文滑块调试与stm32对应串口函数的写法

    迪文屏型号 DMT80480T050_06WTC 用stm32f103zet6 最小系统板 想做一个这样的界面,右边是个滑块0-500,滑块每次变化,数据上传给串口.记录一下过程. 总体遇到了三个问题 ...

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

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

  7. stm32 ISP串口下载

    1 ISP概念         ISP(In-System Programming) 在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用 ...

  8. STM32通过串口控制LED闪烁或者呼吸效果

    STM32通过串口控制LED闪烁或者呼吸效果 目录 STM32通过串口控制LED闪烁或者呼吸效果 1.准备工作 2.思路分析 3.实际操作 4.小结 1.准备工作 1.首先我们需要准备32的最小系统板 ...

  9. 单片机串口连接电脑,USB转TTL线的使用

    注:串口发送数据(USART)是STM32调试中经常使用的功能,但是电脑USB的电平标准与串口所使用的TTL标准不同,所以需要一条USB转TTL线来完成它们之间的通信. 第一步.购买一条USB转TTL ...

最新文章

  1. [摘]终于找到一个有助理解left/right/full outer join的例子
  2. python读数据-python读取各种文件数据方法解析
  3. 如何用敏捷消除项目风险?
  4. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...
  5. 千亿云计算产业加速跑 多云管理助推上云率
  6. python的调试器_玩转Python调试器
  7. window下用主机名登录MySQL数据库出现报错解决方案
  8. 没用TestNG之前,没想过自动化用例管理可以这么强大
  9. python执行js脚本安全吗_手把手教你如何使用Python执行js代码
  10. http://maven.apache.org/POM/4.0.0 报红
  11. Abaqus 两套常用单位
  12. LeeCode 108 递归
  13. 硬件负载均衡设备介绍
  14. Codeforces 1138
  15. 何为ISM频段?ISM频段主要频率有哪些?
  16. 什么是CRM系统,它如何支持客户营销管理?
  17. nginx怎么防御DDOS攻击
  18. PAT_1022_D进制的A+B
  19. SWR 用于数据请求的 React Hooks 库
  20. MotoSimEG-VRC软件:多机器人信号交互与PLC功能

热门文章

  1. MySQL事务的4种隔离级别
  2. 如何使用分布是缓存Hazelcast
  3. [蓝桥杯]连号区间数[题目详解]
  4. 其疾如风,其徐如林。侵掠如火,不动如山。难知如阴,动如雷震。。是什么意思,出处在哪?...
  5. Xilinx 7系列原语使用(时钟相关)——(一)
  6. Android Studio 4.1 发布
  7. 沃尔玛腾讯云 Serverless 应用实践,全力保障消费者购物体验
  8. 图像处理职位面试题汇总(1)
  9. 有扰动的闭环传递函数 matlab,已知闭环传递函数
  10. nvm安装、下载以及nvm使用教程