扫一扫,分享给好友
|
采集AD输入电压值,并点亮小灯。但小灯无法点亮。同时,单步运行,每次adc_value的值不一样。
|
|
相关推荐
2个回答
|
|
|
*sizeof(u16) ); while(1) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while(!DMA_GetFlagStatus(DMA1_FLAG_TC1)); DMA_ClearFlag(DMA1_FLAG_TC1); for(i=0;i<10;i++) { adc_value=TxBuf[i]; if(adc_value>2000) LED_SET(0); else LED_RESET(0); } } }
这段代码存在几个问题: 1. DMA_Tx_Init()函数中第一个参数应该是DMA的通道号,而不是ADC的RDATAR寄存器指针,可以尝试替换为DMA1_Channel1。 2. DMA的传输模式应该是从外设到内存,所以应该使用DMA_Mode_Normal而不是DMA_Mode_Circular。 3. ADC采集完数据后,应该禁止采集,可以在for循环外部调用ADC_StopOfConversion()来实现。 4. LED_SET和LED_RESET函数的具体实现未知,可能存在问题。 5. 每次ADC采集到的数据应该是一个累加值,需要除以采样次数(在此例子中为10)才能得到正确的平均值。 关于每次adc_value的值不一样,可以考虑在ADC_Init函数中设置合适的采样时间、采样周期和转换模式等参数,以及在ADC_SoftwareStartConvCmd函数调用前先执行一次ADC_GetCalibrationValue函数来获取校准值。 |
|
|
|
|
|
还没做过DMA方面的测试。学习中。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
学习ESP32-S3 ,推荐使用什么IDE?
求推荐国产很便宜的MCU推荐
RISC-V 芯片ch582 移植到LiteOs-m 进行中断不切换
大佬们帮我看看瑞萨的E1烧录器吧
CAN loopback模式测试,来个教程
求一个BLE低功耗蓝牙 ch592f新增seriver的例程
新的一年 RISC-V前景如何呢?
2024年risc-v的发展总结
I/O中断问题
RISC-V MCU技术社区什么时候成立的
扫一扫,分享给好友
电子发烧友网
电子发烧友论坛
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191
淘帖