(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)时钟输出
浙公网安备 33010602011771号