初级会员

- 积分
- 73
- 金钱
- 73
- 注册时间
- 2016-2-4
- 在线时间
- 48 小时
|
30金钱
/********************************************************************************
函数名称:void LED_Init(void)
函数功能:实现驱动芯片使用的GPIO初始化
输入参数:none
输出参数:none
硬件分配:
引脚号 引脚名称 系统功能 信号方向
40 PC9 AZ_RESETA 输出
34 PB13 AZ_RESETB 输出
33 PB12 AZ_RESETC 输出
35 PB14 AZ_FAULT 输入
36 PB15 AZ_OTW 输入
52 PC11 EL_RESETA 输出
45 PA12 EL_RESETB 输出
44 PA11 EL_RESETC 输出
50 PA15 EL_FAULT 输入
51 PC10 EL_OTW 输入
*********************************************************************************/
void Motor_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
//使能各GPIO时钟信号
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能GPIOA时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能GPIOB时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //使能GPIOC时钟
// RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE); //使能GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能SYSCFG时钟
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
//初始化电机驱动的复位引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉,默认不打开驱动
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_12;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//复位所有电机驱动,等待使能指令
AZ_RESETA=0;
AZ_RESETB=0;
AZ_RESETC=0;
EL_RESETA=0;
EL_RESETB=0;
EL_RESETC=0;
//初始化电机指示信息使用的IO口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉,无效
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB14,GPIOB15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC10
EXTI_DeInit();
//将各输入与中断源连接
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource15); //PA15连接到中断线15
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource14); //PB14连接到中断线14
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource15); //PB15连接到中断线15
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource10); //PC10连接到中断线10
//配置外部中断中断特性
EXTI_InitStructure.EXTI_Line=EXTI_Line10|EXTI_Line14|EXTI_Line15; //设置中断源
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //中断事件
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd=ENABLE; //中断线使能
EXTI_Init(&EXTI_InitStructure); //配置
//配置中断中断源
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //外部中断EXTI15_10_IRQn
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级0,设置最高优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure); //配置
}
/*****************************************************************************
函数名称:void EXTI15_10_IRQHandler(void)
函数功能:外部触发中断的
输入参数:none
输出参数:none
硬件分配:none
******************************************************************************/
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetFlagStatus(EXTI_Line10)) //俯仰驱动过温
{
EXTI_ClearFlag(EXTI_Line10); //清除外部中断
Servo_Check&=0xfd;
}
else if(EXTI_GetFlagStatus(EXTI_Line14)) //方位驱动错误
{
EXTI_ClearFlag(EXTI_Line14); //清除外部中断
Servo_Check&=0xfb;
}
else if(EXTI_GetFlagStatus(EXTI_Line15)) //俯仰驱动错误、方位驱动过温
{
EXTI_ClearFlag(EXTI_Line15); //清除外部中断
if(AZ_OTW==0)
Servo_Check&=0xfe; //方位驱动过温
if(EL_FAULT==0)
Servo_Check&=0xf7; //俯仰驱动错误
}
else ;
}
|
|