STM32F103电压采集proteus仿真


前言

基于HAL库,仿真单片机型号为stm32f103R6,代码keil5。
通过单片机的ADC采集功能,测量四路电压,数据经由DMA传输,并将结果通过串口输出,结果比较确,误差在0.01V左右。
目前仿真采集四路比较稳定,多了会乱码。
proteus版本8.11
安装包链接:https://pan.baidu.com/s/1yhNKLl1lGSU9KU0tTuAxcg?pwd=dxe8
提取码:dxe8

一、仿真效果

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在这里插入图片描述

二、代码

int main(void)
{
  /* USER CODE BEGIN 1 */
	
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
	MX_CRC_Init();//系统初始化,不写此函数数据输出有问题 
  SystemClock_Config();
  MX_DMA_Init();//DMA初始化
  MX_USART1_UART_Init();//串口初始化 
  MX_ADC1_Init();//ADC初始化
	HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&ADC_Value,len);  //开始DMA传输
  while (1)
  {
		if(adc_flag==1){
			adc_flag=0;		
	
			HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value,len);//通过DMA将ADC数据保存到数组
			for(char i=0;i<len;i++)
			{
				ADC_Voltage[i]=(float)(ADC_Value[i]*3.3/4096);
				temp=ADC_Voltage[i]*100; 
				a[i]=temp/100;
				b[i]=temp/10%10;
				c[i]=temp%10;
			  printf("ADC_Value[%d]=%4d    ",i+1,ADC_Value[i]);
				printf("ADC_Voltage=%d.%d%d\r\n",a[i],b[i],c[i]);		
				HAL_Delay(10);				
			}
			printf("\r\n");
		}
	HAL_Delay(1000);	
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

总结

项目下载地址:.
https://download.csdn.net/download/weixin_42490599/85491375

### STM32F103C8T6 Proteus 仿真无效解决方案 当遇到STM32F103C8T6在Proteus中的仿真无效问题时,通常会表现为程序运行过程中卡死或者无法正常工作。这类问题可能由多种原因引起,下面列举了一些常见的解决方法。 #### 检查硬件连接配置 确保Proteus中的电路原理图正确无误,特别是芯片的电源引脚、晶振以及USART接口等重要部分应按照官方文档的要求进行设置[^1]。任何不恰当的连线都可能导致仿真失败。 #### 调整波特率参数 如果是在调试串口通信功能时出现问题,则需重点核查UART/USART外设初始化函数内的波特率设定是否合理。过高或过低的波特率都会影响到数据传输效率甚至造成阻塞现象。建议先采用较低速率(如9600bps),待确认稳定后再逐步提高至目标值[^2]。 #### 修改库文件版本兼容性 有时使用的标准外设驱动库(SPL)或其他第三方组件可能存在与当前IDE环境下的编译器存在差异的情况,这也会间接引发异常行为。因此可以考虑更新为最新版SPL或是切换成HAL库来重新构建项目工程[^3]。 #### 防止浮点运算溢出错误 对于涉及小数处理的应用场景而言,在未开启相应的支持选项之前贸然执行此类操作容易触发非法指令中断从而终止整个进程。所以在编写代码前务必查阅所选用MCU型号手册了解其对IEEE754标准的支持程度并作出相应调整;另外也可以通过软件层面规避风险比如改用定点算法代替浮点计算方式实现相同效果。 ```c // 示例:使用固定精度替代浮点数表示温度读取结果 int main(void){ float temp_f; // 原始测量得到的小数值 int scaled_temp; /* ... */ // 将float转换为千分之一单位存储于integer变量之中 scaled_temp=(int)(temp_f*1000); } ``` #### 启用断点跟踪机制辅助排查故障源码位置 借助集成开发环境中自带的强大工具集可以帮助快速定位潜在缺陷所在之处。例如Keil uVision提供了单步执行模式和条件判断型暂停等功能可供灵活运用以便更精准地捕捉瞬态变化趋势进而缩小可疑范围直至最终锁定根因所在区间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma_si

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值