CH582F GPIO讀取不到電平值

CH582F GPIO讀取不到電平值

CH582F使用EC11編碼器,PA8 PA9兩個腳讀不到電平值

去除了復雜的中斷處理等,就剩下如下最簡單的GPIO讀取操作也讀不出來

????GPIOA_ModeCfg(GPIO_Pin_8,?GPIO_ModeIN_Floating);
????GPIOA_ModeCfg(GPIO_Pin_9,?GPIO_ModeIN_Floating);

????while(1)
????{
????????EC11B?=?GPIOA_ReadPortPin(GPIO_Pin_8);
????????Uart0_printf("B?%d\r\n",?EC11B);
????????EC11A?=?GPIOA_ReadPortPin(GPIO_Pin_9);
????????Uart0_printf("A?%d\r\n",?EC11A);
????????DelayMs(100);
????}

以上操作讀出來的PA8 PA9 都是0?

但是下降沿中斷是可以正常觸發(fā)的,萬用表測量電壓也有3.3V,說明內部的上拉電阻有在生效


換了兩片芯片都是一樣的現象


但是PA5 PA4就可以正常讀取到高低電平


以下是原理圖

1675426346431219.png

1675426346168279.png


想問一下有大佬知道是什么原因導致的嗎,以及該怎么處理,謝謝


貼在開發(fā)板試一下

int?main(?){
  GPIOB_ModeCfg(GPIO_Pin_7,?GPIO_ModeIN_PD);?//設置模式?下拉輸入
  GPIOB_ModeCfg(GPIO_Pin_10,?GPIO_ModeOut_PP_5mA);?//設置模式?輸出
  GPIOA_ModeCfg(GPIO_Pin_12,?GPIO_ModeIN_PD);?//配置GPIO中斷
  GPIOA_ITModeCfg(GPIO_Pin_12,?GPIO_ITMode_HighLevel);
  PFIC_EnableIRQ(?GPIO_A_IRQn?);
  while(1)
  {
    //輸入
    PRINT("%x\n",GPIOB_ReadPortPin(GPIO_Pin_7));?//讀取電平狀態(tài)
    //輸出
    GPIOB_ResetBits(GPIO_Pin_10);?//高低電平翻轉
    mDelaymS(5);
    GPIOB_SetBits(GPIO_Pin_10);
    mDelaymS(5);
  }
}
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void?GPIOA_IRQHandler(void)
{
  GPIOA_ClearITFlagBit(GPIO_Pin_12);
  printf("Inter\n");
}



跑2#的代碼是正常的,我測試了一下,

直接串口打印GPIO讀取到的電平值是正常的

Uart0_printf("%x\n",GPIOA_ReadPortPin(GPIO_Pin_8));

但是像這樣用一個變量獲取GPIO電平值后再打印,打印出來的一直是0

????????uint8_t?EC11B;
????????EC11B?=?GPIOA_ReadPortPin(GPIO_Pin_8);
????????Uart0_printf("B?%x\r\n",?EC11B);

這是什么原因


GPIOA_ReadPortPin

返回的是int,32位,你定義的uint8_t是8位,類型轉換時信息丟失


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频