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

[复制链接]
2023|6
 楼主| 复仇之矛 发表于 2015-6-8 15:10 | 显示全部楼层 |阅读模式
  1.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15;
  2.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  3.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
  4.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  5.   GPIO_Init(GPIOD, &GPIO_InitStructure);  
  6. // //         GPIO_SetBits(GPIOD,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_14|GPIO_Pin_15);
  7. //   GPIO_SetBits(GPIOD,GPIO_Pin_12);

 楼主| 复仇之矛 发表于 2015-6-8 15:12 | 显示全部楼层
这是在线仿真的寄存器值
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;
mark0668 发表于 2015-6-8 17:13 | 显示全部楼层
你只配制了12脚没有问题啊.程序结果也是正确的,
 楼主| 复仇之矛 发表于 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);
和上面的配置效果是一样的
 楼主| 复仇之矛 发表于 2015-6-9 09:15 | 显示全部楼层
mark0668 发表于 2015-6-8 17:13
你只配制了12脚没有问题啊.程序结果也是正确的,
  1. /****************************
  2. º¯ÊýÃû³Æ£ºLCD12864_init(void)
  3. º¯Êý¹¦ÄÜ£ºLCD12864³õʼ»¯³ÌÐò
  4. *****************************/
  5. void LCD12864_init(void)
  6. {
  7.   RCC->APB2ENR |= 1<<2;     //³õʼ»¯PA¿ÚʱÖÓ
  8.         RCC->APB2ENR |= 1<<4;     //³õʼ»¯PC¿ÚʱÖÓ
  9.   RCC->APB2ENR |= 1<<5;     //³õʼ»¯PD¿ÚʱÖÓ
  10.         RCC->APB2ENR |= 1<<8;     //³õʼ»¯PG¿ÚʱÖÓ

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

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

  17.         GPIOC->CRH &= 0xfff0ffff; //Çå³ýPC12ÏÈǰµÄÅäÖÃ
  18.         GPIOC->CRH |= 0x00030000; //PC12ÍÆÍìÊä³ö
  19.         GPIOC->ODR |= 1<<12;          //Êä³ö¸ßµçƽ
  20.        
  21.         GPIOD->CRH&=0xfff0ffff;
  22.         GPIOD->CRH|=0x00030000;
  23.         GPIOD->ODR|=0<<12;
  24.        
  25.         GPIOD->CRL &= 0x00000000; //Çå³ýPD0-PD7ÏÈǰµÄÅäÖÃ
  26.         GPIOD->CRL |= 0x33333333; //PD0-PD7ÍÆÍìÊä³ö
  27.         GPIOD->ODR |= 255<<0;          //Êä³ö¸ßµçƽ

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

本版积分规则

23

主题

185

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部