串口通信调试

main.c

#include "main.h"char data[100] ;
//数据缓冲流,用来存储数据int main()
{System_Init();//系统初始化SysTick_Init(NULL);//必须有否则会出问题LED_Init();//LED灯初始化,用来观察实验现象USART1_Init();//串口1初始化while(1){scanf("%s",data);//输入函数,可以输入数据到data数组中//这里的本质是计算机向32发送数据printf("输入的结果:%s",data);//输出函数,将数据打印出来//这里的本质是32向计算机发送数据USART1_receive();//串口1接收函数//本质是通过串口1  使32接收数据(这个函数使用有一些问题后面会提到)}}

main.h
这里是各种头文件不再解释

#ifndef __MAIN_H_
#define __MAIN_H_#include "stm32f1xx.h"
#include "stm32_types.h"
#include "stm32_system.h"
#include "delay.h"//驱动头文件
#include "Systick.h"
#include "led.h"
#include "usart.h"#endif

usart.h

#ifndef __USART_H_
#define __USART_H_#include "stm32f1xx.h"
#include "stm32_types.h"
#include "stm32f1xx_hal.h"
#include "delay.h"#include "stdio.h"
#include "stdlib.h"
#include <cstring>
//这三个头文件是为了使用printf  scanf  重定义和strlen函数#define UART_LSR_RDR  (1<<5)    //接收完成标志
#define UART_LSR_THRE (1<<6)    //发送完成标志#define SEND_BUF1 (USART1->DR)  //串口1发送缓冲区
#define RECV_BUF1 (USART1->DR)  //串口1接收缓冲区
#define USART1_SR (USART1->SR)  //串口1状态#define SEND_BUF2 (USART2->DR)
#define RECV_BUF2 (USART2->DR)
#define USART2_SR (USART2->SR) //和一同理void USART1_Init(void);
//串口1初始化
void USART1_receive(void);
//串口1接收数据  本质32接收计算机的信息
void USART1_send(char *data);
//串口1发送数据  本质32向计算机发送信息
#endif

usart.c

#include "usart.h"UART_HandleTypeDef usart1;
//串口结构体句柄语句
u8 test_rxbuf1[200];
//接收缓冲流数组
u8 rx_index1;
//接收长度
void USART1_Init(void)//串口初始化
{GPIO_InitTypeDef GPIO_InitStruct;__GPIOA_CLK_ENABLE();      //使能GPIOA时钟__USART1_CLK_ENABLE();     //使能USART1时钟GPIO_InitStruct.Pin = GPIO_PIN_9; //UASRT1对应IO口PA9 TXGPIO_InitStruct.Mode = GPIO_MODE_AF_OD;        //复用开漏输出模式GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;  //高速GPIO_InitStruct.Pull = GPIO_PULLUP;            //上拉HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        //初始化PA9,PA10GPIO_InitStruct.Pin = GPIO_PIN_10; //UASRT1对应IO口PA10  RXGPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;   //配置为输入HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        //初始化PA10  RXusart1.Instance          = USART1;                //串口1usart1.Init.BaudRate     = 115200;               //波特率设置usart1.Init.WordLength   = UART_WORDLENGTH_8B;    //8位usart1.Init.StopBits     = UART_STOPBITS_1;       //1个停止位usart1.Init.Parity       = UART_PARITY_NONE;      //无校验usart1.Init.HwFlowCtl    = UART_HWCONTROL_NONE;   //无硬件流usart1.Init.Mode         = UART_MODE_TX_RX;       //串口发送,接收使能usart1.Init.OverSampling = UART_OVERSAMPLING_16;  //16倍过采样  HAL_UART_Init(&usart1);   //初始化串口//__HAL_UART_ENABLE_IT(&usart1, UART_IT_RXNE);   //使能接收中断//HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);//HAL_NVIC_EnableIRQ(USART1_IRQn);//后面这三个语句重点说一下,当我们使用scanf重定义的时候这三个需要注释才能使用scanf语句,但是void USART1_IRQHandle(void)因为中断函数被注释所以不能使用。//但当我们把注释取消的时候,scanf函数将出现问题。}void USART1_IRQHandler(void)
{unsigned long temp;temp = USART1_SR;if(temp&UART_LSR_RDR){test_rxbuf1[rx_index1++] = RECV_BUF1;}HAL_UART_IRQHandler(&usart1);
}void USART1_send(char *data)
{uint16_t i,j;i = strlen(data);for(j=0; j<i; j++){while((USART1_SR&UART_LSR_THRE)==0);SEND_BUF1 = data[j];    }}void USART1_receive(void)
{while(rx_index1){uint8_t i;printf("usart1串口接收到: ");for(i=0;i<rx_index1;i++){printf("%c",test_rxbuf1[i]);}printf("\r\n");rx_index1 = 0;}
}//printf函数重定义
int fputc(int ch, FILE *f)
{       while((USART1_SR&UART_LSR_THRE)==0);  //当串口1发送完成且状态为1SEND_BUF1 = (u8) ch; //发送数据return ch;
}//scanf函数重定义
int fgetc(FILE* f)
{while(!(USART1_SR&UART_LSR_RDR));//当不接受且状态为1的时候return RECV_BUF1;//返回数据
}

2、星光STM32F03串口通信调试相关推荐

  1. 基于linux和qt的串口通信调试器调的设计及应用,基于linux和Qt的串口通信调试器调的设计及应用...

    Q:墼 S ic n Tcnl yI oai ea c nead eho g nvt n rd e o n oH l T技术 基于 I x和 Ot iu n的串口通信调试器调的设计及应用 盂繁磊穆丽红 ...

  2. Android模拟器实现windows虚拟串口通信调试

    1. 下载  Virtual Serial Port Driver ,安装后好后,创建一对虚拟串口 2.打开计算机管理 查看设备管理->端口 查看是否生成虚拟端口.(如果没有生成 重启试下) 3 ...

  3. Proteus仿真stm32和51单片机,串口通信调试过程记录

    前言 本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法.        这里要注意的是,在Proteus中 ...

  4. android 串口调试助手_PLC串口通信调试工具amp;调试过程

    串口通信是一种简单的通信方式,通过连接少量线缆即可完成数据通信.做串口通信调试,一般需要进行如下几个过程:1.确认上位机通信;2.确认下位机通信.3.上.下位机联调通信.(上位机是指PLC,下位机是指 ...

  5. 单片机串口通信学号显示_触摸屏与单片机串口通信测试

    工业现场在使用触摸屏的时候,与第三方控制器进行通信连接的时候,一般都是使用成熟的通信协议进行通信连接.而这些协议的实现过程,触摸屏厂商也已经在编程环境中进行了封装集成,对于使用的工程师来说,通信的数据 ...

  6. 【转】[Qt教程] Qt串口通信全新专题

    版权声明 该文章原创于Qter开源社区(www.qter.org),转载请注明出处! 软件:QCom跨平台串口调试助手! 更新提示 这次源码更新,与前面"串口通信专题"主要有下面两 ...

  7. 9-《电子入门趣谈》第一章_一切从单片机开始-1.3.6串口通信

    好消息:请在手机淘宝或闲鱼上搜索"电子入门趣谈",有惊喜哦 :) 我把全本电子入门趣谈的电子版(包括科技提升和理论升华部分,共计50余万字)放到上面开始兜售啦,如果您真的喜欢这本书 ...

  8. 树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作

    在树莓派编译运行 树莓派已经通过网络连接通过串口通信在串口调试小助手打印C gcc xxx.c -lwiringPi 源码 #include <wiringSerial.h> #inclu ...

  9. (串口通信编程) 开源串口调试助手Common (Com Monitor)

    原文地址为: (串口通信编程) 开源串口调试助手Common (Com Monitor) 最新的文档见这里:http://blog.twofei.com/566/ 我写的串口调试助手程序以及源代码. ...

最新文章

  1. IJCAI 2021 | 医学AI新坑:心电全景图及其生成网络
  2. boost::phoenix::find相关的测试程序
  3. [TCP/IP] SSL的通讯原理
  4. os.path 模块
  5. 搭建Windows Embedded Compact 7开发环境
  6. PAT乙级(1034 有理数四则运算)
  7. automation服务器不能创建对象的终极解决办法!
  8. 电视机和计算机的显示器各使用什么扫描方式,扫描方式
  9. codeforces 909 f
  10. 【UEFI实战】EDK编译和使用(更新版)
  11. PHP之实现 家谱树,子孙树
  12. 公众号滑动图代码_【公众号运营】文章图片滑动效果实现方法
  13. QGridLayout(表格布局)详细使用说明
  14. Halcon一些功能算子
  15. Hadoop认识初体验
  16. UnityGUI简介
  17. ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  18. 基恩士读码器HR-101B USB-COM连接读取数据
  19. 【转】【译】让你的网站更炫酷的一些小 tips
  20. ADS(Advanced Design system)谐波平衡分析(HarmonicBalance)和参数扫描分析(ParamSweep)

热门文章

  1. 微信如何群发消息?如何群发突破200上限?
  2. 《深入浅出 node.js 笔记》 - part3
  3. 2017-07-31关于敏捷开发的一些想法
  4. 玩手游《武媚娘传奇》,和女神范冰冰重回大唐
  5. Excel 2010 SQL应用034 字段中含有方括号的查询
  6. Spark参数调优基础版
  7. 关于网络关键节点分析的经典论文(一)
  8. 不会找对象?教你两招再试试【适用于Java攻城狮】
  9. 通信中的同步(一)——基于FFT的信号信号载波频偏估计
  10. conda配置清华源 国内源