前言

本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法。
       这里要注意的是,在Proteus中芯片工作的频率。在实际中,比如STM32外接8MHZ的晶振的时候,在不修改时钟配置的情况下,STM32的系统频率应72MHZ。
       在Protesu中,通过双击仿真的芯片打开属性栏,输入的时钟频率是多少,那么芯片仿真运行的频率就是多少,即使代码里有对时钟进行配置,但是好像在Proteus里时钟的频率就是自己设置的那个值,与代码配置时钟无关。一般选择为8MHZ,因为输入的频率如果过高,那么Proteus仿真时间就过得特别特别的慢,所以在Proteus中仿真STM32时,时钟选择8MHZ比较好。

一、遇到的问题以及解决办法

问题1:stm32串口发送的数据,在串口软件中接收到的全是 00,偶尔串口软件打开串口之后又自动关闭了

问题2:stm32接收到的来自51单片机串口数据,只有第一个字节是正常的,其余字节全部乱码

首先是调试STM32的串口,这里用到了虚拟串口软件给电脑添加了两个虚拟串口,在Proteus中用到了COMPIN这个元件。本次实验波特率选择为2400。首先遇到的问题是,在程序中配置好串口之后,通过虚拟串口软件和串口调试助手,在Proteus中串口发送数据,但是接收到的数据全是00。检测了波特率、起始位、停止位等全部正常,最后在网友的帮助下,加上以下代码之后,串口软件接收到的数据就正常了。
下面的代码加在main函数入口处即可。

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//仿真加上这一句,不然串口调试不通

解决上述问题之后,我将51单片机和stm32的波特率都设置为2400(因为一开始设置为9600,出现问题我以为是波特率的问题,所以改成2400,还是没能解决,就懒得改回去了),然后用51单片机给STM32单片机通过串口发送数据,这里奇怪的是,stm32接收到的数据中,只有第一个字节正常,其余字节全部乱码了,然后我通过虚拟串口和串口调试助手,仍然只能正常接收到第一个字节,如果一次只发送一个字节,那么串口是没问题的。
       下面是我的51单片机发送字符串的函数,这里我添加了延时1ms的函数,没有添加这个函数之前,就只能正常接收到第一个字节,稍微延时一下之后,就可以正常接收到所以字节。所以这里如果遇到类似的问题,大家可以试着在这里延时一下尝试一下。

//字符串发送函数
void PutString(unsigned char *TXStr)  {                while(*TXStr!=0) {                      SBUF=*TXStr;while(TI==0);//仿真这里如果不稍微延时一下,接收到的数据除了第一个字节以外将会全部乱码TI=0;    TXStr++;delay_ms(1);}
}

总结

这里将我调试过程中遇到的问题记录下来,如果大家有遇到类似的问题,希望这篇文章可以帮到你。

Proteus仿真stm32和51单片机,串口通信调试过程记录相关推荐

  1. 51单片机串口通信【收集学习向】

    本篇整理了学习51串口通信过程中看到的一些比较好的文章,有很多的超链接.并根据自己遇到的情况分析了串口传输乱码的一些原因. 目录 1.原理知识 2.测试程序和虚拟仿真 3.电路设计与公母口连线 电路设 ...

  2. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  3. Proteus仿真实验之 51单片机模数转换

    实验目的: 实现模拟电压采集,直接数码管显示模数转换器的转换值 硬件原理图: 软件设计: #include "reg51.h" #define u8 unsigned char s ...

  4. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  5. 51单片机串口通信模板_51单片机串口通信

    51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...

  6. 【Proteus仿真】基于51单片机的八路抢答器

    [Proteus仿真]基于51单片机的八路抢答器 Proteus仿真 主要功能和使用介绍 采用4位数码管设计. 下排按键一一对应八位选手. 上排三个按键,从走到右依次为:开始.暂停.复位. 操作流程: ...

  7. 51单片机~串口通信(讲解+代码)

    51单片机~串口通信 (一)计算机串行通信原理: 综上:所以在设置的时候,经常将SCON设置为0X50==0101 0000 ,使用方式1. (二)工作: 中断控制 led灯,每发送一条指令灯亮或灭( ...

  8. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

  9. 51单片机串口通信发送以及接收代码详解2

    #include <reg51.h> //实验现象:在电脑端没按下发送的时候,单片一直给电脑发送aaa字符串: //实验现象:在电脑端按下发送的时候,结束字符串aaa的发送代码,执行单片接 ...

最新文章

  1. OC WKWebView的JS与OC交互、Cookie管理
  2. 使用OpenCV进行图像创建、保存和复制
  3. Unity上使用Linq To XML
  4. 若依微服务版怎样修改Nacos中配置文件使Url不受权限认证跳过Token验证
  5. element-ui 设置table width %百分比
  6. react学习(18)----vs 全局搜索
  7. IOError: encoder jpeg not available
  8. 小故事有大能量(爱情故事)
  9. 技术分享 | gh-ost 在线 ddl 变更工具​
  10. 代码质量管理平台搭建
  11. 港湾公园 Haven Park for Mac(好玩的探索建造冒险游戏)
  12. centos 安装 Go环境
  13. Linux系统设置命令大全
  14. 【Project】Face Recognition
  15. 不解,排名靠前那么多的人为什么抄袭我的activit博文??
  16. [源码和文档分享]基于C++的餐厅管理程序的设计与实现
  17. 导航上显示某个地点已关闭什么意思_8款手机GPS导航横向对比测评(留存备用)科技美学...
  18. 自己重构一个非常简单的网页
  19. eclipse SVN 项目重新定位
  20. 无锡设计培训——平面设计师都学什么

热门文章

  1. 【Excel VBA】单元格变更事件,单元格内容变更自动触发:Worksheet_Change
  2. Python深度学习:脑电图癫痫发作检测
  3. Python练习题 基本语法(1-18)一
  4. html textarea滚动条样式设置
  5. 汇款效应:全球公民成为发展中国家的经济急救员
  6. 【转】word排版宏的使用
  7. 企业级Android音视频开发笔记分享,快来get正确的学习姿势
  8. 换个花样玩C++(8)吃不透内存布局,坑的是自己,万字经验告诉你类的内存布局
  9. 模拟银行账户转账系统(简单模拟)
  10. interprotscan安装与调试