打印
[STM32F1]

IO口配置后在线仿真,发现寄存器值与配置不符

[复制链接]
1761|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15; 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);  
// //         GPIO_SetBits(GPIOD,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15);
//   GPIO_SetBits(GPIOD,GPIO_Pin_12);

沙发
复仇之矛|  楼主 | 2015-6-8 15:12 | 只看该作者
这是在线仿真的寄存器值

QQ图片20150608151125.png (6.53 KB )

QQ图片20150608151125.png

使用特权

评论回复
板凳
wind~风| | 2015-6-8 16:22 | 只看该作者
第二句把第一句覆盖掉了,10,11,14,15脚根本就没有配置,只配置了12脚

使用特权

评论回复
地板
changmiao| | 2015-6-8 16:48 | 只看该作者
楼上正解,若想增加PIN12,需要改为GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;

使用特权

评论回复
5
mark0668| | 2015-6-8 17:13 | 只看该作者
你只配制了12脚没有问题啊.程序结果也是正确的,

使用特权

评论回复
6
复仇之矛|  楼主 | 2015-6-9 09:08 | 只看该作者
wind~风 发表于 2015-6-8 16:22
第二句把第一句覆盖掉了,10,11,14,15脚根本就没有配置,只配置了12脚

您好,我用这个配置
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
和上面的配置效果是一样的

使用特权

评论回复
7
复仇之矛|  楼主 | 2015-6-9 09:15 | 只看该作者
mark0668 发表于 2015-6-8 17:13
你只配制了12脚没有问题啊.程序结果也是正确的,
 /****************************
º¯ÊýÃû³Æ£ºLCD12864_init(void)
º¯Êý¹¦ÄÜ£ºLCD12864³õʼ»¯³ÌÐò
*****************************/
void LCD12864_init(void)
{
  RCC->APB2ENR |= 1<<2;     //³õʼ»¯PA¿ÚʱÖÓ
        RCC->APB2ENR |= 1<<4;     //³õʼ»¯PC¿ÚʱÖÓ
  RCC->APB2ENR |= 1<<5;     //³õʼ»¯PD¿ÚʱÖÓ
        RCC->APB2ENR |= 1<<8;     //³õʼ»¯PG¿ÚʱÖÓ

        GPIOA->CRH &= 0xfff00fff;
        GPIOA->CRH |= 0x00033000;
        GPIOA->ODR |= 3<<11;      

        GPIOG->CRH &= 0xfffff00f; //Çå³ýPG9 PG10ÏÈÇ°µÄÅäÖÃ
        GPIOG->CRH |= 0x00000330; //PG9 PG10ÍÆÍìÊä³ö
        GPIOG->ODR |= 3<<9;          //Êä³ö¸ßµçƽ

        GPIOC->CRH &= 0xfff0ffff; //Çå³ýPC12ÏÈÇ°µÄÅäÖÃ
        GPIOC->CRH |= 0x00030000; //PC12ÍÆÍìÊä³ö
        GPIOC->ODR |= 1<<12;          //Êä³ö¸ßµçƽ
       
        GPIOD->CRH&=0xfff0ffff;
        GPIOD->CRH|=0x00030000;
        GPIOD->ODR|=0<<12;
       
        GPIOD->CRL &= 0x00000000; //Çå³ýPD0-PD7ÏÈÇ°µÄÅäÖÃ
        GPIOD->CRL |= 0x33333333; //PD0-PD7ÍÆÍìÊä³ö
        GPIOD->ODR |= 255<<0;          //Êä³ö¸ßµçƽ

        PSB = 1;                  //²¢¿Ú·½Ê½  
        write_com(0x30);          //»ù±¾Ö¸Áî²Ù×÷
        delay_ms(5);
        write_com(0x0C);          //ÏÔʾ¿ª£¬¹Ø¹â±ê
        delay_ms(5);
        write_com(0x01);          //Çå³ýLCDµÄÏÔʾÄÚÈÝ
        delay_ms(5);
}
/****************************
º¯ÊýÃû³Æ£ºchk_busy()
º¯Êý¹¦ÄÜ£ºLCDдÈëÃüÁîºÍÊý¾ÝµÄæ¼ì²â
*****************************/
void chk_busy()        ////¼ì²éæλ
{
        RS=0; RW=1; EN=1;
        DataPort(0xff);
        GPIOD->CRL &= 0x0fffffff; //Çå³ýPD7ÏÈÇ°µÄÉèÖÃ
        GPIOD->CRL |= 0x80000000; //PD7ÉèÖóÉÊäÈë(ĬÈÏÏÂÀ­)
        GPIOD->ODR |= 0x10000000;       //PD7ÉÏÀ­
        while(PDin(7)==1);
        GPIOD->CRL &= 0x00000000; //Çå³ýPD0-PD7ÏÈÇ°µÄÅäÖÃ
        GPIOD->CRL |= 0x33333333; //PD0-PD7ÍÆÍìÊä³ö
        GPIOD->ODR |= 0x11111111; //Êä³ö¸ßµçƽ
        DataPort(0xff);
        EN=0;
}
您好,以上代码是LCD12864的初始化和忙检测部分,请你帮忙分析下这段代码,这个配置会影响到PD12引脚的配置,如果注销掉对PA引脚的配置或者取消掉GPIOD->ODR |= 0x11111111;这句话就不会影响到PD12引脚的配置,这是怎么回事儿?

使用特权

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

本版积分规则

23

主题

185

帖子

3

粉丝