你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8 GPIO翻转速度问题

[复制链接]
albertjacksoon 提问时间:2014-12-13 18:47 /
使用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吗?
请高手指教

收藏 评论22 发布时间:2014-12-13 18:47

举报

22个回答
w453509596 回答时间:2014-12-30 10:01:41
兄弟啊,在仿真界面看下你的主要时钟有没有切换过去吧,看你的这段时钟初始化,主时钟不像能切换到了外部时钟。在时钟没有切换到外部时钟的情况下,你也没对内部时钟时行分频,系统时钟只有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的外部时钟下,与内核时钟已相差不多了。
晓枫VS枯叶 回答时间:2014-12-15 17:12:04
楼上正解使用这两个寄存器操作可以更快,测试过stm32 I/0的翻转速度也不过3M左右,可以使用类似下面语句操作。
GPIOB->BRR=GPIO_Pin_11;
GPIOB->BSRR=GPIO_Pin_11;
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-13 21:01:37
抢沙发!
巅峰残狼 回答时间:2014-12-13 21:20:15
GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);
初始化的时候速度设置的多少
奔跑小蜗牛 回答时间: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要更快一些
albertjacksoon 回答时间:2014-12-15 18:16:50
STM8没有BRR和BSRR寄存器
万里-363223 回答时间:2014-12-15 22:29:56
把编译器的优化级别设置为最高级,实现一条语句执行一句汇编,试一下
Dylan疾风闪电 回答时间:2014-12-16 18:26:20
想要翻转快,只有提高主时钟频率。因为主时钟确定的情况下,指令周期时间也是确定的,那么程序的执行必定有最低耗时。
wamcncn 回答时间:2014-12-16 21:05:25
这个问题用库函数,不如使用寄存器直接操作翻转快
小贾-370388 回答时间:2014-12-16 22:29:34
主频多高并不是口输出就那个快,口的输出时通过指令控制的 ,指令运行要耗费始终周期的所有输出速度没有那么快
沐紫 回答时间:2014-12-24 09:17:46
楼主问题是否解决?
AndyYau-268557 回答时间:2014-12-26 11:35:52
楼主对输出速率和翻转速率搞混淆了,输出速率还包含语句运行时间,不肯能和晶振一样。
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版