国民技术-N32G43x比较器参考电压寄存器能对COMP_SetRefScl这个函数说明吗?
void COMP_SetRefScl(uint8_t Vv2Trim, bool Vv2En, uint8_t Vv1Trim, bool Vv1En) 函数能说明下吗 COMP_Initial.InmSel = COMP1_CTRL_INMSEL_VREF_VC1;当为此设置时,Vv2Trim和Vv1Trim 这两个值如何计算 是多少电压点。
void COMP_Configuratoin(void)
{
COMP_InitType COMP_Initial;
/*Set dac2,dac1. because dac1/PA4 is share pin line,so only PB0 puls 0/1, can find out puls*/
COMP_SetRefScl(16, true, 32, true);
/*Initial comp*/
COMP_StructInit(&COMP_Initial);
COMP_Initial.InpSel = COMP1_CTRL_INPSEL_PB10;
COMP_Initial.InmSel = COMP1_CTRL_INMSEL_PA5;
COMP_Initial.SampWindow = 50;
COMP_Initial.Thresh = 30;
COMP_Init(COMP1, &COMP_Initial);
COMP_Enable(COMP1, ENABLE);
}
首先这个函数的原型如下:
void COMP_SetRefScl(uint8_t Vv2Trim, bool Vv2En, uint8_t Vv1Trim, bool Vv1En)
{
__IO uint32_t tmp = 0;
SetBitMsk(tmp, Vv2Trim << 8, COMP_VREFSCL_VV2TRM_MSK);
SetBitMsk(tmp, Vv2En << 7, COMP_VREFSCL_VV2EN_MSK);
SetBitMsk(tmp, Vv1Trim << 1, COMP_VREFSCL_VV1TRM_MSK);
SetBitMsk(tmp, Vv1En << 0, COMP_VREFSCL_VV1EN_MSK);
COMP->VREFSCL = tmp;
}
可以看到它操作的是VREFSCL寄存器(用户手册),以VREFSCL寄存器中的VV1TRM[5:0]为例,它是有6bit,最多就是2^6=64,假设你写进去的值是16,那么VC1的参考电压为3.3v * (16/64)