新手入门
- 积分
- 3
- 金钱
- 3
- 注册时间
- 2017-6-24
- 在线时间
- 0 小时
|
1金钱
使用探索者开发板制作智能小车时,将自己写的可以使用的51单片机小车测试程序按照stm32编程规范重写移植之后,设置PG2,PG3,PG4,PG5作为正反转控制信号端,PG6,PG7作为PWM波信号端,PG8作为驱动模块使能端,开发板上除了这几个端口没有外接任何设备,然而在做测试时,发现PWM波信号正常,而其他几个端口的电平在初始置位后无法操作改变电平,一直维持初始电平不变,尝试过设置为推挽输出与上拉输出两种模式都不起作用,无法对着几个端口进行操作,使用的函数都是官方提供的模块操作函数。附代码如下:
引脚定义部分:
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);//使能GPIOG时钟
//初始化PG_2.PG_3.PG_4,PG_5,PG_6,PG_7,PG_8
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//电机驱动芯片的对应IO口
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_UP;//上拉
GPIO_Init(GPIOG,&GPIO_InitStructure);//初始化GPIO
//置Ain,Bin,PWM高位
GPIO_SetBits(GPIOG,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
//置电机驱动使能位为低开始工作
//GPIO_ResetBits(GPIOG,GPIO_Pin_8);
}
Motor_PWM函数:
void Motor_PWM(void)
{
while(1)
{
GPIO_SetBits(GPIOG,GPIO_Pin_6|GPIO_Pin_7);
delay_ms(10);
GPIO_ResetBits(GPIOG,GPIO_Pin_6|GPIO_Pin_7);
delay_ms(5);
}
}
main函数:
int main(void)
{
u8 key;
delay_init(168);
KEY_Init();
Motor_Init();
Motor_PWM();//启动PWM波生成函数
while(1)
{
key=KEY_Scan(0);
if(key)
{
switch(key)
{
case WKUP_PRES:
GPIO_SetBits(GPIOG,GPIO_Pin_2);
GPIO_ResetBits(GPIOG,GPIO_Pin_3);
GPIO_SetBits(GPIOG,GPIO_Pin_4);
GPIO_ResetBits(GPIOG,GPIO_Pin_5);
break;
case KEY0_PRES:
GPIO_SetBits(GPIOG,GPIO_Pin_2);
GPIO_ResetBits(GPIOG,GPIO_Pin_3);
GPIO_ResetBits(GPIOG,GPIO_Pin_4);
GPIO_SetBits(GPIOG,GPIO_Pin_5);
break;
case KEY1_PRES:
GPIO_ResetBits(GPIOG,GPIO_Pin_2);
GPIO_SetBits(GPIOG,GPIO_Pin_3);
GPIO_ResetBits(GPIOG,GPIO_Pin_4);
GPIO_SetBits(GPIOG,GPIO_Pin_5);
break;
case KEY2_PRES:
GPIO_ResetBits(GPIOG,GPIO_Pin_2);
GPIO_SetBits(GPIOG,GPIO_Pin_3);
GPIO_SetBits(GPIOG,GPIO_Pin_4);
GPIO_ResetBits(GPIOG,GPIO_Pin_5);
break;
}
}else delay_ms(10);
}
}
|
|