打印
[方案讨论]

HK32F030C8T6把OSC_IN和OSC_OUT作为普通的IO口使用

[复制链接]
878|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
键盘手没手|  楼主 | 2023-1-12 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, os
将OSC_IN和OSC_OUT初始化相应的模式
    GPIO_InitStructure.GPIO_Pin = CSB_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(CSB_GPIO_PORT, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = RSTB_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_Init(RSTB_GPIO_PORT, &GPIO_InitStructure);


使用特权

评论回复

相关帖子

沙发
键盘手没手|  楼主 | 2023-1-12 11:44 | 只看该作者
这样配置完之后发现GPIO输出的高电平电压完全达不到3.3V。原因是我们在初始化systemclock时,把外部晶振也初始化了。所以我们只需要把外部晶振不使能,就可以把OSC_IN和OSC_OUT当作普通的IO口使用了。

使用特权

评论回复
板凳
键盘手没手|  楼主 | 2023-1-12 11:45 | 只看该作者
打开函数 SystemInit();

使用特权

评论回复
地板
键盘手没手|  楼主 | 2023-1-12 11:45 | 只看该作者
就会看到
void SystemInit (void)
{   
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
  RCC->CFGR &= (uint32_t)0xF8FFB80C;
  
  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Reset PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
  RCC->CFGR &= (uint32_t)0xFFC0FFFF;

  /* Reset PREDIV1[3:0] bits */
  RCC->CFGR2 &= (uint32_t)0xFFFFFFF0;

  /* Reset USARTSW[1:0], I2CSW, CECSW and ADCSW bits */
  RCC->CFGR3 &= (uint32_t)0xFFFFFEAC;

  /* Reset HSI14 bit */
  RCC->CR2 &= (uint32_t)0xFFFFFFFE;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

  /* Configure the System clock frequency, AHB/APBx prescalers and Flash settings */
  SetSysClock();
}

使用特权

评论回复
5
键盘手没手|  楼主 | 2023-1-12 11:46 | 只看该作者
打开SetSysClock();并把 RCC->CR |= ((uint32_t)RCC_CR_HSEON) 修改为RCC->CR &= ~((uint32_t)RCC_CR_HSEON);

使用特权

评论回复
6
键盘手没手|  楼主 | 2023-1-12 11:47 | 只看该作者
static void SetSysClock(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

/******************************************************************************/
/*            PLL (clocked by HSE) used as System clock source                */
/******************************************************************************/
  
  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/
  /* Enable HSE */   
  //RCC->CR |= ((uint32_t)RCC_CR_HSEON);
  RCC->CR &= ~((uint32_t)RCC_CR_HSEON);
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }  

  if (HSEStatus == (uint32_t)0x01)
  {
    /* Enable Prefetch Buffer and set Flash Latency */
    FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;

    /* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

    /* PLL configuration */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);
            
    /* Enable PLL */
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }

    /* Select PLL as system clock source */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

    /* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */
  }  
}

使用特权

评论回复
7
键盘手没手|  楼主 | 2023-1-12 11:48 | 只看该作者
完成这样的步骤就可以把OSC_IN和OSC_OUT当作IO口使用了。

使用特权

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

本版积分规则

103

主题

1141

帖子

0

粉丝