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吗?
请高手指教
抢沙发!:) GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);
初始化的时候速度设置的多少 巅峰残狼 发表于 2014-12-13 21:20
GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);
初始化的时候速度设置的多少
10M 调用库函数与操作寄存器效果一样 IO口输出速度怎么可能达到晶振的速度??手册的2M 10M 50M是翻转速度,不是输出速度。13.56M的晶振,IO能输出个2M 3M就很不错了。 直接使用BRR,BSRR两个寄存器,比操作ODR要更快一些 楼上正解使用这两个寄存器操作可以更快,测试过stm32 I/0的翻转速度也不过3M左右,可以使用类似下面语句操作。
GPIOB->BRR=GPIO_Pin_11;
GPIOB->BSRR=GPIO_Pin_11; STM8没有BRR和BSRR寄存器 把编译器的优化级别设置为最高级,实现一条语句执行一句汇编,试一下 想要翻转快,只有提高主时钟频率。因为主时钟确定的情况下,指令周期时间也是确定的,那么程序的执行必定有最低耗时。