STC32G12K128-ADC

最近开发一个12VBMS的项目,为了降成本和提高开发周期,硬件工程师选择了一款国产MCU作为主控,基本上能满足功能要求

项目主要模块就是AD采样,CAN报文发送,故障诊断

今天记录一下AD采样这部分

复制代码
//===============================================
//ADC初始化函数
//===============================================
void adc_init(void)
{
    //所有ADC引脚配置高阻输入
    P0M1 |= 0x7c;
    P0M0 &= ~0x7c;
    P1M1 |= 0x03;
    P1M0 &= ~0x03;
    //ADC_CONTR |= 1<<4;           //使能PWM
    ADCTIM = 0x3f;               //设置ADC内部时序
    EADC=0;                   //禁止ADC转换中断
    ADCCFG |= 1<<5;              //转换结果右对齐
    ADCCFG |= 0xC;             //设置ADC时钟/2/16
    ADC_CONTR |= 1<<7;           //打开电源
    delay_ms(10);
}
//===============================================
//ADC获取通道数字量,channelNum=0~15
//===============================================
unsigned short GetADCresult(unsigned char channelNum)
{
   ADC_RES = 0;
   ADC_RESL = 0;

   ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channelNum;    //启动 AD 转换
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while((ADC_CONTR & 0x20) == 0)  ;   //wait for ADC finish
    ADC_CONTR &= ~0x20;     //清除ADC结束标志
    return  (((unsigned short)ADC_RES << 8) + ADC_RESL);
}
复制代码

后面根据要求,对通道结果进行滤波。

posted @   涛哥nihao  阅读(643)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示