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

w806 adc 中断扫描通道采集

用到了该芯片adc 扫描4个adc 通道,官方的死循环等待非常浪费时间,这里改用adc 中断采集方式,记录一下

int32_t  adcFilterSum[4]={0};
int32_t detec_adc_value[4]={0};//mV
int16_t detec_convt_ok[4]={0};/*is OK*/
ADC_HandleTypeDef hadc;void w80x_adc_init(void){__HAL_RCC_ADC_CLK_ENABLE();__HAL_AFIO_REMAP_ADC(GPIOA,GPIO_PIN_1);__HAL_AFIO_REMAP_ADC(GPIOA,GPIO_PIN_2);__HAL_AFIO_REMAP_ADC(GPIOA,GPIO_PIN_3);__HAL_AFIO_REMAP_ADC(GPIOA,GPIO_PIN_4);hadc.Instance = ADC;hadc.Init.channel = ADC_ANA_CR_CH_0;hadc.Init.freq = 1000;HAL_ADC_Init(&hadc);ADC->ADC_CR |=ADC_ADC_CR_ADCIE;/*interrupt enable*/NVIC_ClearPendingIRQ((IRQn_Type)ADC_IRQn);NVIC_EnableIRQ((IRQn_Type)ADC_IRQn);HAL_ADC_Start(&hadc);//start adc
}#define		__ADC_VALUE_CONVT(value)((value & 0x20000)?(value&0x1FFFF):(value|0x20000))
#define 		ADC_I_FILTER_SHIFT  		6
__attribute__((isr)) void ADC_IRQHandler(void){
static uint8_t data_error_count =0;if(++data_error_count>=4){/*Wait for it to stabilize*/data_error_count =0;int tempval=ADC->DR & 0x3FFFC;tempval = __ADC_VALUE_CONVT(tempval);uint32_t reg_cr = ADC->ANA_CR;uint32_t channelx = 0x3&(reg_cr>>8);detec_convt_ok[channelx] =1;tempval =tempval -hadc.offset;float vale = (float)tempval *0.03159075 + 1196;adcFilterSum[channelx] = adcFilterSum[channelx] - (adcFilterSum[channelx] >> ADC_I_FILTER_SHIFT) + (int32_t)vale;detec_adc_value[channelx] = adcFilterSum[channelx] >> ADC_I_FILTER_SHIFT;/*filter*/if(++channelx>=4){channelx =0;}reg_cr =(0xff&reg_cr) |(channelx<<8);WRITE_REG(ADC->ANA_CR,reg_cr);	}WRITE_REG(ADC->IF, ADC_IF_ADC|ADC_IF_CMP);
}

W802使用该函数有的时候引脚悬空会得到一个-17 mV ,并且通道编号有错乱,,无解。。。  detec_adc_value[4]得到的mV值,detec_convt_ok[4] 大于0 转换完毕,实际使用后需要清除。

http://www.lryc.cn/news/185478.html

相关文章:

  • 使用CSS的Positions布局打造响应式网页
  • 模型训练环境相关(CUDA、PyTorch)
  • 链动2+1模式:社交电商行业的新型商业模式与营销手段
  • 竞赛选题 深度学习 opencv python 实现中国交通标志识别
  • LuatOS-SOC接口文档(air780E)-- fskv - kv数据库,掉电不丢数据
  • 一篇文章教你Pytest快速入门和基础讲解,一定要看!
  • SpringBoot项目:Cannot find declaration to go to
  • 【高并发】多线程和高并发提纲
  • vue.js处理数组对象中某个字段是否变为两个字段
  • 从零开始的C++(补充三的内容)
  • 微信小程序通过createSelectorQuery获取元素 高度,宽度与界面距离
  • MySQL-事务
  • 自动定时删除磁盘文件的脚本(从文件日期最早的开始删)
  • 拆解CPU的基本结构和运行原理
  • Docker安装——Ubuntu (Jammy 22.04)
  • Fast DDS之Transport
  • 爱普生L125X_L325X系列打印机Wi-Fi配置方法(Smart Panel)
  • 【回顾一下Docker的基本用法】
  • 【Python】Python基础知识
  • 【计算机视觉 05】YOLO论文讲解:V1-V7
  • git全局与单仓库的密码管理
  • IDEA的使用(一) (IntelliJ IDEA 2022.1.3版本)
  • javaee SpringMVC文件上传 项目结构
  • JavaScript DOM 函数大全详解(使用最新的 JS 语法)
  • Stm32_标准库_8_ADC_光敏传感器_测量具体光照强度
  • 基于SSM的固定资产管理系统的设计与实现
  • Leetcode---364场周赛
  • 使用 Powershell 检索不理解的命令
  • 基于 FPGA 的机器博弈五子棋游戏
  • uCOSIII实时操作系统 三 移植