STM32F103电压采集proteus仿真

本文介绍了一种使用STM32F103R6单片机的ADC功能进行四路电压采集的方法,并通过DMA传输数据,最终通过串口输出结果。整个系统基于HAL库实现,误差范围在0.01V左右。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

基于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 中的仿真方法 在 Proteus 软件中实现 STM32F103C8T6 的仿真是许多嵌入式开发者的常见需求。以下是关于如何设置和使用该芯片进行仿真的详细说明。 #### 1. 安装 STM32F103C8T6 库文件 为了能够在 Proteus 中成功加载并运行 STM32F103C8T6,需要下载对应的库文件并将它们集成到 Proteus 环境中。具体操作如下: - 首先访问官方资源网站或其他可信平台获取适用于 ProteusSTM32F103C8T6 模型库文件[^1]。 - 将下载得到的 `.LIB` 和 `.DAT` 文件复制至 Proteus 安装目录下的 `Libraries` 文件夹内。 - 打开 Proteus 后,在元件列表中搜索 “STM32F103C8T6”,确认其已正确导入。 #### 2. 设置硬件连接与配置 完成库文件安装之后,需按照实际项目需求搭建电路图。对于串口通信功能而言,应特别注意以下几点: - **UART 接线**:确保 TXD/RXD 引脚与其他外设(如虚拟终端)之间建立正确的电气联系。 - **晶振频率调整**:依据所选时钟源设定内部 RC 或外部晶体参数,通常推荐采用标准值 8MHz/72MHz 组合来匹配默认固件初始化逻辑[^2]。 #### 3. 编写测试程序 针对特定应用场景编写相应的驱动代码至关重要。例如当遇到通过 HAL 库尝试发送带有小数部分的数据却发生阻塞现象时,则可以考虑自定义一个专门用于处理此类情况的方法作为替代方案之一——即前面提到过的 `PrintFloat()` 函数实例演示了如何精确控制数值格式化输出过程而不依赖于高级 I/O 流机制从而规避潜在兼容性风险[^1]。 ```c void PrintFloat(float value) { int tmp, tmp1, tmp2, tmp3, tmp4; tmp = (int)value; tmp1 = abs((int)((value - tmp) * 10)) % 10; tmp2 = abs((int)((value - tmp) * 100)) % 10; tmp3 = abs((int)((value - tmp) * 1000)) % 10; tmp4 = abs((int)((value - tmp) * 10000)) % 10; printf("%d.%d%d%d%d", tmp, tmp1, tmp2, tmp3, tmp4); } ``` 以上片段展示了如何将浮点数据分解成整数位及其后续四位有效数字并通过字符串拼接方式呈现出来以便进一步传递给 UART 设备接口层执行物理传输动作。 --- #### 总结 综上所述,要顺利完成基于 STM32F103C8T6 平台上的 Proteus 数字孪生实验工作流构建任务,不仅需要合理规划好软硬件协同工作的整体框架结构而且还得深入理解目标微控制器架构特性以及周边配套工具链生态体系之间的相互作用关系才能达到预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ma_si

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

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

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

打赏作者

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

抵扣说明:

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

余额充值