完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、简述 先介绍最简单的片上 ADC ,通常是 12 位,精度则为 3.3/4096 v 。 读取 ADC 的方式有很多: 1 、轮询 2 、中断 3 、 DMA 因为在实际开发中仅有轮询和 DMA 存在使用场景,所以在这里我仅介绍轮询和 DMA 的方式 二、示例操作 (one)DAC轮询方式 4、实际代码编写 使能printf函数。 /* USER CODE BEGIN Includes */ #include /* USER CODE END Includes */ /* USER CODE BEGIN 0 */ int fputc(int ch, FILE *f){ uint8_t temp[1] = {ch}; HAL_UART_Transmit(&huart1, temp, 1, 2);//huart1?????????? return ch; } /* USER CODE END 0 */ 具体adc函数编写 /* USER CODE BEGIN 1 */ uint16_t AD_Value; /* USER CODE END 1 */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_ADC_Start(&hadc1);//启动adc转换 HAL_ADC_PollForConversion(&hadc1, 50);//等待转换完成,第二个参数表示超时时间,单位ms if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))// { AD_Value = HAL_ADC_GetValue(&hadc1);//读取ADC转换数据,数据为12位 printf("ADC_Value:%.1f mv",AD_Value*3300.0/4096);//输出adc的值 } HAL_Delay(1000);//延迟一秒(不建议在实际应用中使用) } /* USER CODE END 3 */ 要知道,adc转换后的数据是一个12位的二进制数,我们需要把这个二进制数代表的模拟量(电压)用数字表示出来。比如这次我们测量的电压范围是0~3.3V,转换后的二进制数是x,因为12位ADC在转换时将电压的范围大小(也就是3.3)分为4096(2^12)份,所以转换后的二进制数x代表的真实电压的计算方法就是: y=3.3* x / 4096 (TWO)DAC之DAM方式 1、cubx配置 初始化广告通道0和通道1 (1)使能扫描转换模式(扫描转换模式),使能连续转换(连续 转换模式)。 (2):ADC规则组选择信道转换数为2( Number Of Conversion) 。 (3) : 配置Rank的输入通道 添加。DMA设置,设置为连续传输模式,数据长度为字。 三.示例代码 uint32_t ADC_Value[100]; uint8_t i; uint32_t ad1,ad2; |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9050 浏览 16 评论
4085 浏览 18 评论
1169浏览 3评论
602浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
594浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2331浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1894浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 02:58 , Processed in 1.280470 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号