資源簡介
鏡頭變焦步進電機芯片MP6507驅動芯片簡單代碼實現,基于STM32F30x
代碼片段和文件信息
#include?
#include?“cam.h“
#include?“stm32f30x.h“
#if?((defined(USING_LENS_STEP_MOTOR)))
#define?MP_A1_Port??????????GPIOB
#define?MP_A1_Pin???????????GPIO_Pin_12
#define?MP_A2_Port??????????GPIOB
#define?MP_A2_Pin???????????GPIO_Pin_13
#define?MP_B1_Port??????????GPIOB
#define?MP_B1_Pin???????????GPIO_Pin_14
#define?MP_B2_Port??????????GPIOB
#define?MP_B2_Pin???????????GPIO_Pin_15
#define?MP_A1_SET()?????????do{MP_A1_Port->BSRR?=?MP_A1_Pin;}while(0)
#define?MP_A1_CLR()?????????do{MP_A1_Port->BRR?=?MP_A1_Pin;}while(0)
#define?MP_A2_SET()?????????do{MP_A2_Port->BSRR?=?MP_A2_Pin;}while(0)
#define?MP_A2_CLR()?????????do{MP_A2_Port->BRR?=?MP_A2_Pin;}while(0)
#define?MP_B1_SET()?????????do{MP_B1_Port->BSRR?=?MP_B1_Pin;}while(0)
#define?MP_B1_CLR()?????????do{MP_B1_Port->BRR?=?MP_B1_Pin;}while(0)
#define?MP_B2_SET()?????????do{MP_B2_Port->BSRR?=?MP_B2_Pin;}while(0)
#define?MP_B2_CLR()?????????do{MP_B2_Port->BRR?=?MP_B2_Pin;}while(0)
#define?MP_RCC????????(RCC_AHBPeriph_GPIOB)
#define?MP_IDLE?????????????0
#define?MP_STOP?????????????1
#define?MP_RUNNING??????????2
#define?MP_SPD_MIN??????????1
#define?MP_SPD_MAX??????????8
#define?MP_POS_MIN??????????(0)
#define?MP_POS_MIN_RE???????(268)
#define?MP_POS_MIN_RE1???????(396)//視場角70度
#define?MP_POS_MIN_RE2???????(298)//視場角75度
#define?MP_POS_MAX??????????(1120)
static?int?_mp_act?=?MP_IDLE;
int?*_mp_act_init_stop?=?&_mp_act;
static?int?_mp_cnt?=?0;
static?int?_mp_spd?=?8;
static?int?_mp_pos?=?MP_POS_MIN;
static?int?_mp_tgt?=?MP_POS_MIN;
static?struct?timer?_mp_timer;
static?const?uint8_t?_mp_wave_tbl[]?=?{0x050x040x060x020x0A0x080x090x01};
/********************************************************
?*
?********************************************************/
static?inline?void?mp_hw_pwm_set(int?val)
{
????if?(val?&?0x01)
????????MP_A1_SET();
????else
????????MP_A1_CLR();
?????if?(val?&?0x02)
????????MP_A2_SET();
????else
????????MP_A2_CLR();
?????if?(val?&?0x04)
????????MP_B1_SET();
????else
????????MP_B1_CLR();
?????if?(val?&?0x08)
????????MP_B2_SET();
????else
????????MP_B2_CLR();
}
/********************************************************
?*
?********************************************************/
static?void?_mp_hw_timeout_handler(void?*parameter)
{
????int?idx;
????switch?(_mp_act)
????{
????case?MP_IDLE:
????????break;
????case?MP_STOP:
????????mp_hw_pwm_set(0x00);
????????_mp_act?=?MP_IDLE;
????????break;
????case?MP_RUNNING:
????????if?(_mp_cnt++?!=?(MP_SPD_MAX?-?_mp_spd))
????????????break;
????????_mp_cnt?=?0;
????????
????????idx?=?_mp_pos?&?(sizeof(_mp_wave_tbl)?-?1);
????????mp_hw_pwm_set(_mp_wave_tbl[idx]);
????????if?(_mp_pos?!=?_mp_tgt)
????????{
????????????if?(_mp_pos?>?_mp_tgt)
????????????????_mp_pos?--;
????????????else
????????????????_mp_pos?++;
????????}
????????else
????????{
????????????_mp_act?=?MP_STOP;
????????????
????????}
????????break;
?
評論
共有 條評論