STM32
直播中

李志静

7年用户 1331经验值
私信 关注
[问答]

STM8 GPIO翻转速度只有1.1MH这是为什么呢?

使用13.56MH晶振作为系统时钟.主函数如下:
void main(void)
{
   /* CLK configuration -------------------------------------------*/
   /* Select HSE as system clock source */
   CLK_SYSCLKSourceSwitchCmd(ENABLE);
   CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);
   /* system clock prescaler: 1*/
   CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
   while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)
   {}
    /* GPIO Configuration */
    GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);
    while (1)
   {
      GPIOB->ODR ^= GPIO_Pin_2;
   }
}
实现测量GPIO的翻转速度只有1.1MH这是为什么呢?GPIO的翻转速度不是最高10MH吗?
请高手指教

回帖(2)

陈辉

2024-5-16 11:02:28
在仿真界面看下你的主要时钟有没有切换过去吧,看你的这段时钟初始化,主时钟不像能切换到了外部时钟。在时钟没有切换到外部时钟的情况下,你也没对内部时钟时行分频,系统时钟只有2MHz。速度当然达不到10M了。你用下面这段时钟初始化代码,试试看吧。
static void MCU_Clock_Init(void)
{
  CLK_DeInit();   //时钟寄存器初始化
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);   //内部时钟1分频
  CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);         //主要时钟分频
  CLK_HSECmd(ENABLE);                                         //使能外部时钟
  while(CLK_GetFlagStatus(CLK_FLAG_HSERDY) == RESET);  //等待外部时钟稳定
  (void)CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_ENABLE);       //自动切换到 外部主时钟                  
}
我做项目时,用的STM8S207RB,GPIO口的速度挺快的,没具体没时,在是在24M的外部时钟下,与内核时钟已相差不多了。
举报

韩宁

2024-5-16 11:02:36
楼上正解使用这两个寄存器操作可以更快,测试过stm32 I/0的翻转速度也不过3M左右,可以使用类似下面语句操作。
GPIOB->BRR=GPIO_Pin_11;
GPIOB->BSRR=GPIO_Pin_11;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分