albertjacksoon 发表于 2014-12-13 18:47:42

STM8 GPIO翻转速度问题

使用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吗?
请高手指教

大器所成 发表于 2014-12-13 21:01:37

抢沙发!:)

巅峰残狼 发表于 2014-12-13 21:20:15

GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);
初始化的时候速度设置的多少

albertjacksoon 发表于 2014-12-13 22:00:03

巅峰残狼 发表于 2014-12-13 21:20
GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);
初始化的时候速度设置的多少

10M 调用库函数与操作寄存器效果一样

奔跑小蜗牛 发表于 2014-12-15 09:13:17

IO口输出速度怎么可能达到晶振的速度??手册的2M 10M 50M是翻转速度,不是输出速度。13.56M的晶振,IO能输出个2M 3M就很不错了。

QianFan 发表于 2014-12-15 13:10:18

直接使用BRR,BSRR两个寄存器,比操作ODR要更快一些

晓枫VS枯叶 发表于 2014-12-15 17:12:04

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

albertjacksoon 发表于 2014-12-15 18:16:50

STM8没有BRR和BSRR寄存器

万里-363223 发表于 2014-12-15 22:29:56

把编译器的优化级别设置为最高级,实现一条语句执行一句汇编,试一下

Dylan疾风闪电 发表于 2014-12-16 18:26:20

想要翻转快,只有提高主时钟频率。因为主时钟确定的情况下,指令周期时间也是确定的,那么程序的执行必定有最低耗时。
页: [1] 2 3
查看完整版本: STM8 GPIO翻转速度问题