打印
[STM8]

请教,STM8L152的ADC,寄存器值无法写入是什么原因

[复制链接]
4308|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
videre|  楼主 | 2011-4-6 11:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 videre 于 2011-4-6 11:49 编辑

IDE是IAR1.2
单步调试时,ADC的所有寄存器值都写不进去,总是复位值
是不是还有什么寄存器没有配置


/***************************************************
初始化ADC1采样
*****************************************************/

void ADC1_init(void)
{
  ADC1_CR1 = 0x00;   // ADC转换模式=单次, 关闭ADC
  ADC1_CR2 = 0x04;   // 1x ADC时钟,采样时间48个ADC时钟周期
  ADC1_SQR1 = 0x80;  //关闭DMA
}

/***************************************************
显示电池电量
ADC1通道0,端口PA6
*****************************************************/
void Show_Battery(void)
{
  ADC1_init();
  
  unsigned int AD_Battery;
  
  ADC1_CR1 = 0x01;   // 使能ADC转换
  delay_us(50);       // 延时一段时间,至少7uS,保证ADC模块的上电完成

  ADC1_SQR4 = 0x01;   //选择通道0

  ADC1_CR1 = 0x03; //  开始ADC转换
  delay_us(50);                             
  
  while(!(ADC1_SR & (1<<0)));// 等待ADC结束  
  AD_Battery = ADC1_DRH<<8;              // 读出ADC结果的高8位
  AD_Battery = AD_Battery & ADC1_DRL;


  if(AD_Battery > 1800)
    LCD_WriteIconString(90,0,"WX"); // battery volt-meter full
  else
    if(AD_Battery > 1200)
      LCD_WriteIconString(90,0,"UV"); // battery volt-meter half
    else
      LCD_WriteIconString(90,0,"ST"); // battery volt-meter empty
  
}
沙发
CrazyST| | 2011-4-6 13:24 | 只看该作者
外设门控时钟CLK_PCKENR2|=0X01,开启ADC1外设时钟,否则所有操作都不行
STM8S默认所有外设门控时钟都是开启,但STM8L默认除了BOOT ROM时钟外,所有外设门控时钟都是关闭的。

使用特权

评论回复
板凳
videre|  楼主 | 2011-4-6 13:40 | 只看该作者
果然如此,搞定了,谢谢楼上

使用特权

评论回复
地板
solarmax1969| | 2012-8-23 14:24 | 只看该作者
说对了! STM8L151 时钟必须喂相关的设备,那个设备才能工作!
看了有很多人恼火在这个上面!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

183

帖子

3

粉丝