请教关于STM32F103的MIPS问题

2019-12-12 18:25发布

      昨天我在调试STM32F103RBT6和STM32F103VET6的时候,发现一个很奇怪的现象,具体如下:

     主循环代码都是:
  

     while(1)
         {
            GPIOB->ODR|=1<<1;
            GPIOB->ODR&=0<<1;
          }

就是不停地输出矩形波。其他的代码,除了二者一个用HD一个用MD,内核的启动文件也不一样,其他代码都一样。
二者测试到的波形很大不同:STM32F103RBT6测到的脉宽居然为1μS左右,而STM32F103VET6测到的是120ns左右。前者居然是后者的8倍!求大神帮个忙告诉我这是啥情况?

STM32F103RBT6和STM32F103VET6的数据手册上写的都是1.25DMips/MHz,若按这个值算的话,一个指令周期是多长时间?上面两个测到的有正确的吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
JaySur
1楼-- · 2019-12-12 18:44
没人知道吗?
DM_2014
2楼-- · 2019-12-12 23:42
 精彩回答 2  元偷偷看……
tomzbj
3楼-- · 2019-12-13 02:07
本帖最后由 tomzbj 于 2019-3-6 15:49 编辑

其中一个的晶振没启动?把主频输出到MCO,上示波器看看主频对不对?以及ODR挺慢的,至少用BSRR和BRR试试吧
再就是不能在while里只切一次,得这么写
  1. while(1) {
  2. GPIOx->BSRR = GPIO_Pin_y;
  3. GPIOx->BRR = GPIO_Pin_y;
  4. GPIOx->BSRR = GPIO_Pin_y;
  5. GPIOx->BRR = GPIO_Pin_y;
  6. GPIOx->BSRR = GPIO_Pin_y;
  7. GPIOx->BRR = GPIO_Pin_y;
  8. ...

  9. }
复制代码
然后在示波器里看脉冲宽度

一周热门 更多>