OpenEdv-开源电子网

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

STM32 例程delay延时不准确

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-5-14
在线时间
12 小时
发表于 2020-5-14 15:51:48 | 显示全部楼层 |阅读模式
1金钱
STM32 F103流水灯例程,修改为STM32F103C8芯片后,delay_ms()函数工作正常(8M晶振)。
int main(void)
{       
        delay_init();            //Ñóê±oˉêy3õê¼»ˉ          
        LED_Init();                          //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
        while(1)
        {
                LED0=0;
                delay_ms(500);         //Ñóê±500ms
                LED0=1;
                delay_ms(500);        //Ñóê±500ms
        }
}


用示波器测试LED0上的波形,周期为1000ms,波形符合程序

修改system_stm32f10x.c的注释,改变芯片的SYSCLK
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#define SYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000  */
#define SYSCLK_FREQ_36MHz  36000000
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
/*#define SYSCLK_FREQ_72MHz  72000000*/
#endif


发现LED0上的输出波形,在SYSCLK_FREQ_36MHz以外的参数都能确输出,周期为1000ms左右。
SYSCLK_FREQ_36MHz时,LED0的波形周期为880ms左右,显然delay_ms()函数延时不准确了,查了大半天也找不出什么原因,请各大师指导!


实验1 跑马灯实验.rar

1.98 MB, 下载次数: 8

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

使用道具 举报

0

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-14 16:17:20 | 显示全部楼层
顶起,顶起,不要沉了啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-5-15 01:16:20 | 显示全部楼层
只有ST有实现的频率才可以用, 建议直接用我们提供的方式修改主频
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-5-14
在线时间
12 小时
 楼主| 发表于 2020-5-15 11:25:15 | 显示全部楼层
正点原子 发表于 2020-5-15 01:16
只有ST有实现的频率才可以用, 建议直接用我们提供的方式修改主频

已经是使用你们提供的方式修改主频的了,其它主频都能正常工作,就只有36M的不行。能帮忙分析一下吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-5-16 01:28:13 | 显示全部楼层
readbooklmy 发表于 2020-5-15 11:25
已经是使用你们提供的方式修改主频的了,其它主频都能正常工作,就只有36M的不行。能帮忙分析一下吗?

你可以自己写一个36M倍频函数。或者用我们的函数。
36M肯定是可以的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
672
金钱
672
注册时间
2019-7-28
在线时间
61 小时
发表于 2020-5-16 10:44:55 | 显示全部楼层
凡是DELAY,设置systick  : HAL_DELAY(),都不是“很准”。
后者相对准确,但也是相对于晶体精度的,要准确就必须有专用的实时时钟,后专用的定时器,同时有时最高级中断的“处理”,处理的程序要考虑动作导致的延迟,否则,没有精度能达到你要求的DELAY,即便是采用原子钟同步的时钟,也是有修正的,因为你忘了传输路径产生的误差。
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-5-16 11:09:02 | 显示全部楼层
用定时器吧....
猪猪熊呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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