OpenEdv-开源电子网

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

新手刚入手32,根据视频寄存器编写跑马灯,延时函数偏差很大?而且延时初始化时为什么要赋值?

[复制链接]

7

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2017-7-8
在线时间
46 小时
发表于 2017-7-14 15:49:36 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=c,true]#include "led.h"
#include "stm32f10x.h"               
#include "delay.h"       

int main(){
        delay_init(50);
        led_Init();       
        while(1){
                GPIOB->ODR|=1<<5;
                GPIOE->ODR&=0<<5;
                delay_ms(500);
       
           GPIOB->ODR&=~(1<<5);
                 GPIOE->ODR|=~(0<<5);
                 delay_ms(500);   
                }


}
[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

麻烦先好好看一下手册!你这么问,我感觉你可能C语言也没什么基础,定义的函数是这样的:void delay_init(u8 SYSCLK),你要调用delay_init函数,必须填入参数才可以,不然肯定报错,也不是随便填的,里面的值是MCU的主频,STM32F103ZET6主频是72M,如果MCU是STM32F103ZET6就填72,你填50肯定是错的,MCU的主频都是8的倍数! 先复习一下C语言的基础,再对照手册和例程去学
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
金钱
327
注册时间
2016-7-9
在线时间
49 小时
发表于 2017-7-14 15:49:37 | 显示全部楼层
麻烦先好好看一下手册!你这么问,我感觉你可能C语言也没什么基础,定义的函数是这样的:void delay_init(u8 SYSCLK),你要调用delay_init函数,必须填入参数才可以,不然肯定报错,也不是随便填的,里面的值是MCU的主频,STM32F103ZET6主频是72M,如果MCU是STM32F103ZET6就填72,你填50肯定是错的,MCU的主频都是8的倍数!
先复习一下C语言的基础,再对照手册和例程去学
回复

使用道具 举报

7

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2017-7-8
在线时间
46 小时
 楼主| 发表于 2017-7-14 15:51:28 | 显示全部楼层
第六行的延时初始化不赋值就会报错
延时500Ms,感觉没效果,延时时间明显超了
求助
回复

使用道具 举报

12

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
424
金钱
424
注册时间
2016-6-12
在线时间
93 小时
发表于 2017-7-14 16:16:45 | 显示全部楼层
liuliuliu 发表于 2017-7-14 16:10
麻烦先好好看一下手册!你这么问,我感觉你可能C语言也没什么基础,定义的函数是这样的:void delay_init(u ...

正解~      
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-7-14 16:18:00 | 显示全部楼层
初始化为什么要赋值、、、看来你C语言基础颇差。。不要急。。先了解sys。usart。delay。这几个以后会经常用到
回复

使用道具 举报

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2017-7-14
在线时间
77 小时
发表于 2017-7-14 16:39:14 | 显示全部楼层
正点原子中的delay_Init(u8 Sysclk)的形参是系统时钟,是进入AHB预分频器的系统时钟。用51单片机讲就是,设置为50MHz,机器周期就比72MHz长了,一个简单指令一个机器周期,延时500次,肯定比预期的长
回复

使用道具 举报

7

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2017-7-8
在线时间
46 小时
 楼主| 发表于 2017-7-14 22:08:42 | 显示全部楼层
liuliuliu 发表于 2017-7-14 15:49
麻烦先好好看一下手册!你这么问,我感觉你可能C语言也没什么基础,定义的函数是这样的:void delay_init(u ...

多谢你的解答,这方面真的很薄弱啊。最后的提点真的是很感谢。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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