芯片是 STM32L432
用 ADC1的Channel17 采集内部温度传感器数据;
用 ADC1的Channel0 采集内部VREF,反向来计算VDDA;
大部分代码cubemx 生成了;
但JSQR应该是cube 有bug,不能自动生成(通道全是0);
直接手写JSRQ:
ADC1->CR |= ADC_CR_JADSTP;
ADC1->CR |= ADC_CR_ADEN;
ADC1->JSQR = 0x00001179;
while(LL_ADC_IsActiveFlag_ADRDY(ADC1) == 0);
LL_ADC_INJ_StartConversion(ADC1);
神奇的事情是:
VREF的值算出来ok;
这时候算出来的 Temperature sensor 的ADC 值是错误的,其实应该是其他通道;
如果我手工在IAR 里面写一下JSQR 的值位0x0x00001179,这时候转化就正确了,MCU温度获取也正常了;
问题:
1)、IAR下,仿真 RESET ADC1 的配置值还在,不能跟着芯片复位,一起复位(IAR已经设置硬件RESET脚复位);
只能在程序开头手工加复位:
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
__disable_irq();
//reset adc.
RCC->AHB2RSTR |= RCC_AHB2RSTR_ADCRST;
RCC->AHB2RSTR &= ~RCC_AHB2RSTR_ADCRST;
2)、JSQR明明写进去了,为啥第一次不能生效,17通道转化错误?
3)、ADC 校准calibration功能很容易卡死,导致什么也不能写入,具体操作步骤我忘了,反正不好校准,要么卡死,要么校准位永远不能清零;
求大神解答;
|