(CC模式)STM32高速时钟产生方式--并给标志位

本次的目标:STM32驱动并行ADC采集电压信号

ADC型号:AD9220 最大可实现10MSPS

时钟频率:1MHz

 

方法1:使用定时器产生中断对IO口进行翻转,同时给出标志位对ADC采集信号 

//定时器初始值
 TIM3_Int_Init(0,36-1); //  500ns 触发一次中断
//中断函数
 void TIM3_IRQHandler(void)   //TIM3中断
{
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
        {
                    
            AD9220_CLK=~AD9220_CLK;      //ADC时钟信号 PA4  
            timer_flag = 1;                //给CPU一个标志性,对ADC采样
        }
}

//主函数
int main (void)
{
    uint16_t AD_Data;
    各种初始值定义
    AD9220_CLK = 1;
    timer_flag = 0;
    
    while(1)
    {
        if(timer_flag == 1)
        {
            AD_Data = AD9220ReadData();    //AD数据读取
            timer_flag = 0;
        }
    
    }
    
}

结果:虽然定义设置成1MHz的频率,实际使用示波器最大可到270KHz

原因: 翻转IO需要CPU运行,高速的翻转会导致CPU负载过高。

   中断有按时触发,但是IO翻转速度更不上,导致中途丢数据。

    使用CPU来控制IO翻转属于软件控制,会比硬件控制更加耗时,速率跟不上。

 

方法2:MCO(Microcontroller Clock Output)时钟输出

    

posted on 2025-08-19 16:47  Aliang2020  阅读(17)  评论(0)    收藏  举报