u8 RTC_Init(void)
{
//检查是不是第一次配置时钟
u8 temp=0;
if(BKP->DR1!=0X5050)//第一次配置
{
RCC->APB1ENR|=1<<28; //使能电源时钟
RCC->APB1ENR|=1<<27; //使能备份时钟
PWR->CR|=1<<8; //取消备份区写保护
RCC->BDCR|=1<<16; //备份区域软复位
RCC->BDCR&=~(1<<16); //备份区域软复位结束
RCC->BDCR|=1<<0; //开启外部低速振荡器
while((!(RCC->BDCR&0X02))&&temp<250)//等待外部时钟就绪
{
temp++;
delay_ms(10);
};
if(temp>=250)return 1;//初始化时钟失败,晶振有问题
RCC->BDCR|=1<<8; //LSI作为RTC时钟
最后这句,应该是选LSE作为RTC时钟才对啊,怎么说是LSI,谁能解答一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
RCC->APB2ENR|=1<<15; //ADC3 时钟使能
RCC->APB2RSTR|=1<<15; //ADC 复位
RCC->APB2RSTR&=~(1<<15); //复位结束
RCC->CFGR&=~(3<<14); //分频因子清零
//SYSCLK/DIV2=12M ADC 时钟设置为 12M,ADC 最大时钟不能超过 14M
//否则将导致 ADC 准确度下降
RCC->CFGR|=2<<14;
ADC3->CR1&=0XF0FFFF; //工作模式清零
ADC3->CR1|=0<<16; //独立工作模式
ADC3->CR1&=~(1<<8); //非扫描模式
ADC3->CR2&=~(1<<1); //单次转换模式
ADC3->CR2&=~(7<<17);
ADC3->CR2|=7<<17; //软件控制转换
ADC3->CR2|=1<<20; //使用外部触发(SWSTART)!必须使用一个事件触发
ADC3->CR2&=~(1<<11); //右对齐
ADC3->SQR1&=~(0XF<<20);
ADC3->SQR1|=0<<20; //1 个转换在规则序列中 也就是只转换规则序列 1
//设置通道 1 的采样时间
ADC3->SMPR2&=~(7<<3*6); //通道 6 采样时间清空
ADC3->SMPR2|=7<<3*6; //通道 6,239.5 个周期,提高采样时间可以提高精度
ADC3->CR2|=1<<0; //开启 AD 转换器
ADC3->CR2|=1<<3; //使能复位校准
while(ADC1->CR2&1<<3); //等待校准结束
这也是精英的程序,LSENS程序里面的,最后两句:使能了ADC3复位,等待的是ADC1校准结束,难道这两是同一个寄存器?
有知道的网友,请指教一下。
一周热门 更多>