利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序

利用STM32的定时器中断功能编写线阵CCD(ILX554B)的驱动时序

1.利用定时器完成线阵CCDILX554B的驱动时序,采用两个管脚1个用于产生ROG信号,一个用于产生CLK信号
2.使用一个按键,每按一次,CLK的频率变为原来的1/2,ROG的信号长度依次类推

在这里插入图片描述

#include "pbdata.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void TIM3_Configuration(void);
void EXTI_Configuration(void);
//端口等配置省略
u16 T,i,flag;

//主函数
int main(void)
{
	 i=0;
	 T=20;
   RCC_Configuration();	//系统时钟初始化
   GPIO_Configuration();
   TIM3_Configuration();
   EXTI_Configuration();
   NVIC_Configuration();
	 flag=0;
   while(1)
	 {
		 if(flag==0)
		 {
		     GPIO_SetBits(GPIOB,GPIO_Pin_5);	//clk1
		     delay_ms(10);
		     GPIO_ResetBits(GPIOD,GPIO_Pin_6);	//rog0
		     delay_ms(20);
		     GPIO_SetBits(GPIOD,GPIO_Pin_6);	//rog1
		     delay_ms(10);
		     GPIO_ResetBits(GPIOB,GPIO_Pin_5);	//clk0
			 flag=1;
		 }
		 
		 TIM_Cmd(TIM3,ENABLE);					
		 if(i==2*2086) 							
		 {
			 TIM_Cmd(TIM3,DISABLE);
			 TIM3_Configuration();
			 i=0;
			 f=0;
		 }
	 }		 
}

void TIM3_Configuration(void)
{
//定时器初始化
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;

TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

TIM_TimeBaseStruct.TIM_Period=T-1;       	//预分频频率
TIM_TimeBaseStruct.TIM_Prescaler=35999;		//预分频系数
TIM_TimeBaseStruct.TIM_ClockDivision=0;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,DISABLE);

}


```c
//中断函数

void TIM3_IRQHandler(void)
{
		 if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
		 {
		    GPIO_SetBits(GPIOB,GPIO_Pin_5);	
		 }
		 else
		 {
		    GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		 }

	   i++;
		 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}

void EXTI9_5_IRQHandler(void)
{

	if(EXTI_GetITStatus(EXTI_Line5)==SET)
	{
		delay_ms(10);
	  if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==RESET)
	  {
			T*=2;
	  }
  }
	  EXTI_ClearITPendingBit(EXTI_Line5);
}

猜你喜欢

转载自blog.csdn.net/qq_40727117/article/details/107874900