OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5507|回复: 7

实现1s的延时,但是仿真出力之后是0.4s?

[复制链接]

28

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2132
金钱
2132
注册时间
2014-11-18
在线时间
215 小时
发表于 2014-11-22 14:46:58 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]求助:问题出在哪里了?[/mw_shl_code] [mw_shl_code=c,true]#include"stm32f10x.h" void delay(int); int main(void) { unsigned char temp1=0; RCC->CR|=0x00010000; //外部高速时钟使能HSEON while(!(RCC->CR>>17)); //等待外部时钟就绪 RCC->CFGR=0X00000400; //APB1=DIV2(PLL二分频作为APB1的时钟);APB2=DIV1;AHB=DIV1, //此位设置保证APB1时钟小于等于36MHZ RCC->CFGR=0x1C0400; //设置9倍频 RCC->CFGR|=1<<16; //PLLSRC ON FLASH->ACR|=0x32; //FLASH 2个延时周期, /*若不延时,程序直接跑飞,CPU速度快,这个延时,是为了等待FLASH, FLASH的访问速度最大小于等于24MHZ 0个等待周期,当0<SYSCLK<24MHZ ,0x30 1个等待周期,当24MHZ<SYSCLK<=48MHZ ,0x31 2个等待周期,当48MHZ<SYSCLK<=72MHZ ,0x32 */ RCC->CR|=0x01000000; //PLLON while(!(RCC->CR>>25)); //PLLRDY,PLL时钟就绪标志位,等待PLL锁定 RCC->CFGR|=0x00000002; //设置PLL作为系统时钟,SW【1:0】系统时钟切换 while(temp1!=0x02) //等待PLL作为系统时钟设置成功,SWS【1:0】系统时钟切换状态 { temp1=RCC->CFGR>>2; //仅仅是移位,并没有改变CFGR寄存器的其他位的值 temp1&=0x03; } RCC->APB2ENR=0x04; //使能IOPA端口时钟,PA8 RCC->APB2ENR|=1<<5; //使能IOPD端口时钟,PD2,这样操作至改变目标位,不会影响其他位的值 GPIOD->CRL=0x44444344; //PD2设置为通用推挽输出,最大速度为50MHZ GPIOA->CRH=0x44444443; //PA8设置为通用推挽输出,最大速度为50MHZ GPIOD->ODR=0x04; //端口输出数据寄存器,设置PD2为高 GPIOA->ODR=0x100; //端口输出数据寄存器,设置PA8为高 while(1) { delay(1000); GPIOD->ODR=~(GPIOD->ODR); //端口输出数据寄存器,设置PD2为低 GPIOA->ODR=~(GPIOD->ODR); //端口输出数据寄存器,设置PA8为低 delay(1000); GPIOD->ODR=~(GPIOD->ODR); //端口输出数据寄存器,设置PD2为高 GPIOA->ODR=~(GPIOD->ODR); //端口输出数据寄存器,设置PA8为高 } } void delay(int x) //实现毫秒级的延时,延时为x毫秒; { unsigned int temp2=0; SysTick->LOAD=0x01; //设置自动重载; SysTick->VAL=0xFFFFFE;//设置计数初值,一次时间为1/9000000s; SysTick->CTRL=0x01; //systick的时钟源为外部时钟,不产生中断,使能;开始计数 while((x*9000)!=temp2) { if((SysTick->CTRL&=1<16)==1) //是否倒计数到0; { temp2+=1; } } SysTick->CTRL=0x00; //关闭计数器; } [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2013-11-7
在线时间
23 小时
发表于 2014-11-22 20:06:04 | 显示全部楼层
你还是硬件抓一下波形吧,仿真可能不对的
回复

使用道具 举报

17

主题

293

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2012-12-26
在线时间
1 小时
发表于 2014-11-22 21:26:05 | 显示全部楼层
以硬件为准,软件只作参考
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-22 23:58:32 | 显示全部楼层
楼主可以参考下我们的延时函数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

28

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2132
金钱
2132
注册时间
2014-11-18
在线时间
215 小时
 楼主| 发表于 2014-11-24 20:39:46 | 显示全部楼层
回复【2楼】北京:
---------------------------------
看闪烁的效果的话,好像是有1S的!
回复

使用道具 举报

28

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2132
金钱
2132
注册时间
2014-11-18
在线时间
215 小时
 楼主| 发表于 2014-11-24 20:40:10 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
OK!
回复

使用道具 举报

28

主题

91

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2132
金钱
2132
注册时间
2014-11-18
在线时间
215 小时
 楼主| 发表于 2014-11-24 20:40:56 | 显示全部楼层
回复【3楼】kassandra:
---------------------------------
是不是说,软件仿真有误差?
回复

使用道具 举报

3

主题

138

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2014-5-12
在线时间
4 小时
发表于 2014-11-24 23:18:07 | 显示全部楼层
软件仿真很多时候不准。。。用示波器看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 00:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表