打印

STM32 GPIO不受控?

[复制链接]
2781|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fq1110|  楼主 | 2009-12-4 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是keil.
遇到到 PA4, PA5 , PA6,PA7 等无法设置输出状态.
在keil的调试状态就感觉无**常设置.而引脚设置跟附近的一样,看起来没错.
但无**常设置.其他的比如PC5~PC7等就没有问题.
初始化的语句:应该没有问题.
   GPIO_InitTypeDef GPIO_InitStructure;

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
沙发
fq1110|  楼主 | 2009-12-4 11:01 | 只看该作者
有可能是什么原因啊?大家帮帮忙啊。

使用特权

评论回复
板凳
fq1110|  楼主 | 2009-12-4 11:12 | 只看该作者
这4个pin,是分别用做SPI1 NSS,SCK,MISO,MOSI作用的,JTAG也没有用到这4个pin脚。我用来做普通GPIO口有问题吗?是否是硬件有问题?

使用特权

评论回复
地板
vigia| | 2009-12-4 11:17 | 只看该作者
PA时钟开了伐?

使用特权

评论回复
5
fq1110|  楼主 | 2009-12-4 11:30 | 只看该作者
已经开了。。。但是不行。

使用特权

评论回复
6
fq1110|  楼主 | 2009-12-4 14:15 | 只看该作者
整段代码贴上来,寻求帮助。
void  BSP_Init(void)
{
          /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
          /* RCC system reset(for debug purpose) */
          RCC_DeInit();

          /* Enable HSE */
          RCC_HSEConfig(RCC_HSE_ON);

          /* Wait till HSE is ready */
          HSEStartUpStatus = RCC_WaitForHSEStartUp();

          if(HSEStartUpStatus == SUCCESS)
    {
            /* Enable Prefetch Buffer */
             FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
            /* Flash 2 wait state */
            FLASH_SetLatency(FLASH_Latency_2);   
            /* HCLK = SYSCLK */
            RCC_HCLKConfig(RCC_SYSCLK_Div1);   
            /* PCLK2 = HCLK */
            RCC_PCLK2Config(RCC_HCLK_Div1);  
            /* PCLK1 = HCLK/2 */
            RCC_PCLK1Config(RCC_HCLK_Div2);
            /* PLLCLK = 8MHz * 9 = 72 MHz */
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
            /* Enable PLL */
            RCC_PLLCmd(ENABLE);
             /* Wait till PLL is ready */
             while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
               {
               }
             /* Select PLL as system clock source */
             RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
             /* Wait till PLL is used as system clock source */
             while(RCC_GetSYSCLKSource() != 0x08)
              {
              }
    }
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
           RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR,ENABLE);
           PWR_BackupAccessCmd(ENABLE);
           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC
         | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE  
         | RCC_APB2Periph_AFIO, ENABLE);

        GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable , ENABLE );
        GPIO_Config();
        SysTick_Config();                                          
}

static void SysTick_Config(void)
{
    RCC_ClocksTypeDef  rcc_clocks;
    unsigned long         cnts;
    RCC_GetClocksFreq(&rcc_clocks);
    cnts = (unsigned long)rcc_clocks.HCLK_Frequency/1000;
    SysTick_SetReload(cnts);
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
    SysTick_CounterCmd(SysTick_Counter_Enable);
    SysTick_ITConfig(ENABLE);
}

int main(void)
{
        u32 i;
        u8 flag=0;
           BSP_Init();
        GPIO_SetBits(GPIOA, GPIO_Pin_14);
        GPIO_SetBits(GPIOB, GPIO_Pin_7);
//        LIS33_Configuration();
                SPI_LIS33_CS_LOW();
        while(1)
        {
//                Parse_Lis33();
                SPI_LIS33_CS_HIGH();
                GPIO_SetBits(GPIOA, GPIO_Pin_All);
                for(i=0;i<100000*100;i++)
                        ;
                SPI_LIS33_CS_LOW();
                GPIO_ResetBits(GPIOA, GPIO_Pin_All);
                if(flag==0)
                {
                           GPIO_ResetBits(GPIOC,GPIO_Pin_5);
                        flag=1;
                }
                else
                {
                        GPIO_SetBits(GPIOC, GPIO_Pin_5);
                        flag=0;
                }
        }
           return 1;                                                
}

void GPIO_Config(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;


          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
          GPIO_Init(GPIOA, &GPIO_InitStructure);

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
          GPIO_Init(GPIOC,&GPIO_InitStructure);
          GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_Init(GPIOB, &GPIO_InitStructure);
}

使用特权

评论回复
7
fq1110|  楼主 | 2009-12-4 14:40 | 只看该作者
自己顶起。。。

使用特权

评论回复
8
fq1110|  楼主 | 2009-12-4 16:37 | 只看该作者
不顶了。。结贴。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

530

帖子

1

粉丝