当前位置: 首页 > news >正文

EABMDVN[麦麦茶水间] 【每周分享】沁恒UQPACWHAMR开发中遇到的VTBCMXHIA采样不准及解决方案

最近接到一个物联网项目,就是做一个蓝牙控制继电器的案例,主控芯片采用国产沁恒CH592F,之前从没有用这个芯片开发过,所以对芯片并不了解,项目中有两个温度传感器,需要用到单片机ADC采集并转换成温度值,本来这个都比较简单的,也没有什么好说的,但是采集过程却一波三折,下面我给大家细细道来。
下面给大家看看今天的主角。

其中的温度adc电路如下

分别连接到PA12,PA13两个引脚,写了一个简单的代码,
复制
/*********************************************************************

* @fn NTC_SampleChannel_DMA_Block

*

* @brief 使用DMA阻塞方式采集指定通道的NTC数据

*

* @param channel - ADC通道

* @param buf - 数据缓冲区

* @param len - 缓冲区长度

* @param timeout_ms - 超时时间(毫秒)

*

* @return 0-成功, -1-失败

*/

int NTC_SampleChannel_DMA_Block(uint8_t channel, uint16_t *buf, uint16_t len, uint32_t timeout_ms)

{

if((buf == NULL) || (len == 0))

return -1;

// 选择通道

ADC_ChannelCfg(channel);

// 设置自动转换周期

ADC_AutoConverCycle(192);

// 配置DMA

ADC_DMACfg(ENABLE, (uint32_t)buf, (uint32_t)(buf + len), ADC_Mode_Single);

// 启动自动DMA采样

ADC_StartAutoDMA();

// 等待DMA完成

uint32_t waited = 0;

const uint32_t poll_interval_ms = 10;

while(!ADC_GetDMAStatus())

{

mDelaymS(poll_interval_ms);

waited += poll_interval_ms;

if(waited >= timeout_ms)

{

// 超时: 禁用DMA并返回错误

ADC_DMACfg(DISABLE, 0, 0, 0);

return -1;

}

}

// 清理DMA

ADC_StopAutoDMA();

R16_ADC_DMA_BEG = ((uint32_t)buf) & 0xffff;

ADC_ClearDMAFlag();

ADC_DMACfg(DISABLE, 0, 0, 0);

return 0;

}

/*********************************************************************

* @fn NTC_GetAverage

*

* @brief 计算ADC采样平均值

*

* @param buf - 数据缓冲区

* @param len - 缓冲区长度

*

* @return 平均值

*/

uint16_t NTC_GetAverage(uint16_t *buf, uint16_t len)

{

if((buf == NULL) || (len == 0))

return 0;

uint32_t sum = 0;

for(uint16_t i = 0; i < len; i++)

{

sum += (buf[i] & RB_ADC_DATA);

}

return (uint16_t)(sum / len);

}
采集出来的信息通过CDC虚拟的串口打印,但是打印出来的却是明显与实际温度不对,


后面找了好久的错误,但一直都没有找到,本来想偷懒,不想看数据手册,现在没有办法了,只能拿出手册仔细查看了,不看不知道,一看吓一跳,这个ch592f与我们平时用的MCU的adc都不同,下面我贴出来,免得大家以后再继续踩坑。

原来它的ADC可以带放大的,还有参考电压不同,如是赶紧修改我的宏定义。

下面再编译下载,终于在串口打印出正常的室温了。
https://zhuanlan.zhihu.com/p/2003798624002385576
https://zhuanlan.zhihu.com/p/2003798624002385576/
https://zhuanlan.zhihu.com/p/2003798624002385576

http://www.jsqmd.com/news/475467/

相关文章:

  • 【2026年最新600套毕设项目分享】springboot博客网站的设计与实现(14138)
  • ARM嵌入式学习(一) --- 入门51
  • ArcGIS自定义模式的使用
  • 【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
  • 【2026年最新600套毕设项目分享】springboot宠物交易管理平台设计与实现(14139)
  • 【生产线数智化质量可靠性管控与安全风险感知】
  • 爬虫解析网页,正则表达式与XPath简单运用
  • 【2026年最新600套毕设项目分享】springboot大型超市前后台系统(14140)
  • Flutter 三方库 jaspr_lints 的鸿蒙化适配指南 - 让 Web 开发拥有 Flutter 级的严谨、构筑鸿蒙 Web 应用的静态防线、打造高性能 HTML 渲染的最佳实践
  • 基于知识库(RAG)系统打造由大模型(LLM)驱动NPC游戏的技术设想
  • 模型的容量与控制:欠拟合与过拟合的博弈
  • 2026年OpenClaw极简部署教程,两步拥有专属AI助理!
  • 你是一位专注于趋势交易的 A 股投资分析师
  • Python实现智能聊天机器人
  • 2026年评价高的iOS应用分发品牌推荐:app应用分发/应用分发平台/iOS内测应用分发好评推荐公司 - 品牌宣传支持者
  • Flutter 三方库 convex_hull 的鸿蒙化适配指南 - 精准凸包算法计算、支持高效几何图形处理、助力鸿蒙端复杂 UI 交互设计
  • 效率升级:为什么JamTools值得成为你的必备工具软件
  • Redis面试题 03
  • OpenClaw的心跳30分钟才跳一次?Clawith:15秒感知世界,Agent终于有了自主意识
  • Typora安装教程(激活)
  • Java正则表达式基础知识
  • Flutter 三方库 foodb 鸿蒙适配指南 - 构建工业级 CouchDB 兼容的分布式 NoSQL 存储方案
  • 家长实测|3家少儿机器人编程机构真实体验
  • RAG跨页表格怎么自动对齐合并?
  • Spring面试题 02
  • 老板看不见的修仙路
  • 多版本gcc共存方法探索
  • 算法题练习Day1:B2006 地球人口承载力估计
  • 【完全免费】电脑桌面必备的置顶便签,待办事项一目了然,还可以设置专属闹钟,让你再也不怕忘记任何事情。
  • STP理论知识