完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
说起来真的难以置信,一个最简单的延时,居然在mounriver里边无效。各位高手看看什么原因。在STM32这个程序运行非常正常,可以在输出看到高低脉冲。直接上代码,
#define dsp_TOGGLE1 (GPIOC->OUTDR ^= GPIO_Pin_6) void io_Init(void) { //================================= GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); } void delayms(u16 x) // 延时 (x) ms { u16 j; while(x--){ for(j=0;j<123;j++){;} } } int main(void) { u32 cnt; io_Init(); while(1){ dsp_TOGGLE1; for(cnt=0;cnt<10000;cnt++) delayms(50); } } |
|
相关推荐
4个回答
|
|
|
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal){ if (BitVal != Bit_RESET) { GPIOx->BSHR = GPIO_Pin; } else { GPIOx->BCR = GPIO_Pin; }}你好,使用这个函数进行IO口输出试一下,V103不支持对IO口进行位操作。
|
|
|
|
|
|
不会啊,我把定时器改成debug。c里边的Delay_Us(1),工作正常啊?这个函数的数值变化,输出会跟着变化。我确认对IO的操作正常,关键是延时的程序无效。
|
|
|
|
|
|
明显是编译器认为你的delayms函数毫无必要给优化掉了。你观察一下汇编代码确认一下。
把最里面的for循环里面加个nop指令就可以避免优化。但是用循环来定时这种方式受影响的因素太多不是好写法。 |
|
|
|
|
|
你好,这边建议你可以将优化等级降低,优化等级设置方法如下图1,此外建议你将delayms函数里的延时数值设置大一些,当你设置为50的时候,大约为500ns,如图2,肉眼无法看见闪烁现象,建议设置大一些,比如设置为1000。
图1 图2 |
|
|
|
|
只有小组成员才能发言,加入小组>>
383 浏览 0 评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
887 浏览 0 评论
1483 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
3435 浏览 2 评论
2843 浏览 1 评论
安卓手机支持外接otg扩展坞 然后使用ch340+ch9329控制电脑吗
1833浏览 1评论
1483浏览 1评论
383浏览 0评论
CH582M HOST发送数到设备后,提交IN一直是2A是什么问题?
887浏览 0评论
485浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 18:24 , Processed in 0.701825 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1652