OpenEdv-开源电子网

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

sys文件中delay函数的问题

[复制链接]

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2016-7-19
在线时间
168 小时
发表于 2017-7-21 11:51:30 | 显示全部楼层 |阅读模式
4金钱
sys文件的的延时函数是用内核的滴答时钟做的。
我最近想把这个函数用在stm32f413开发板上,这个板子没有接外部高速时钟(HSE)。所以用标准库函数配置后,会使用内部高速时钟(HSI)作为系统时钟。
HSI的频率是16MHz,系统的时钟也就为16MHz。然后我套用sys文件中的关于delay配置的函数,基本什么都没改,这时 滴答时钟的频率=系统频率/8=2MHz,
然后我在主函数初始化delay函数如下
delay_init(16);

可是我在使用延时时,比如
delay_ms(1000);//延时1s

结果根本没有1s就结束了,
以上是我的理解,不知道问题出在哪儿。求助



最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2017-7-21 11:51:31 | 显示全部楼层
回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2016-7-19
在线时间
168 小时
 楼主| 发表于 2017-7-21 11:52:52 | 显示全部楼层
忘了说,如果按照正常的配置,STM32F413的主频可达100MHz
回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2016-7-19
在线时间
168 小时
 楼主| 发表于 2017-7-24 10:30:59 | 显示全部楼层

谢谢原子哥,我现在也没找出原因,觉的也应该是时钟的关系,我再看看
回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2016-7-19
在线时间
168 小时
 楼主| 发表于 2017-7-24 11:46:28 | 显示全部楼层

确实是时钟的配置问题。我在main()函数的初始位置中增加下面语句
[mw_shl_code=applescript,true]RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI );[/mw_shl_code]

这条语句的意思设置HSI为系统时钟源。这样就可以正常使用延时了,然后我用示波器大概测了一下 LED闪烁的周期大概为 1.96s   也差不多。
不过我看在系统初始化函数中
[mw_shl_code=applescript,true]void SystemInit(void)[/mw_shl_code]

也是把HSI做为系统时钟源。不知道怎么就不行的


回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2016-7-19
在线时间
168 小时
 楼主| 发表于 2017-7-24 11:54:25 | 显示全部楼层
还是看不穿 发表于 2017-7-24 11:46
确实是时钟的配置问题。我在main()函数的初始位置中增加下面语句
[mw_shl_code=applescript,true]RCC_ ...

[mw_shl_code=applescript,true]void SystemInit(void)[/mw_shl_code]
这里面的有两句是配置为HSI的  
[mw_shl_code=applescript,true]  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;[/mw_shl_code]

这个函数后面的配置,都是对相应寄存器进行重置 然后在后面调用下面这个函数
[mw_shl_code=applescript,true] /* Configure the System clock source, PLL Multiplier and Divider factors,
     AHB/APBx prescalers and Flash settings ----------------------------------*/
  SetSysClock();[/mw_shl_code]

正真完成时钟的配置,但是这个函数是针对HSE配置的,我的板子
回复

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1100
金钱
1100
注册时间
2016-7-19
在线时间
168 小时
 楼主| 发表于 2017-7-24 13:13:17 | 显示全部楼层
突然打不了字了。。

SetSysClock();
这个函数是针对HSE来配置的,然而我的板子上没有用HSE,所以该函数里面的配置都没有实现。这样来看的话,前面重置的所有寄存器都没有进行新的配置,可能这就是导致我的delay-ms()没能实现的原因。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-23 07:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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