OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4932|回复: 1

探索者开发板在将GPIOG的引脚作为信号输出端时,无法操作

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-6-24
在线时间
0 小时
发表于 2017-6-24 22:23:48 | 显示全部楼层 |阅读模式
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);
        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2017-5-10
在线时间
55 小时
发表于 2017-6-25 17:36:50 | 显示全部楼层
卡在motor_pwm里面的死循环了,pwm最好还是定时器做
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 17:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表