最近开发一个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); }
后面根据要求,对通道结果进行滤波。
标签:AD,0x7c,0x03,STC32G12K128,void,ADC From: https://www.cnblogs.com/taotaonihao/p/16799726.html