OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
12
返回列表 发新帖
楼主: 正点原子

仿ALIENTEK STM32开发板,写的STM8S的延时函数(基于IAR),汇编精确延时.奉献给大家了.

  [复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-3-6
在线时间
10 小时
发表于 2017-3-6 15:30:40 | 显示全部楼层
STM8L系列不知道适不适合,下载了试一下。
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

Super 该用户已被删除
发表于 2017-4-20 14:38:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
发表于 2017-7-17 11:39:16 | 显示全部楼层
本帖最后由 xinshou 于 2017-7-17 17:25 编辑

为了满足misra规范,我将代码改成了:
[mw_shl_code=c,true]void  delay_ms(u16 nms)
{
         u8 t;

         if( nms > 65U )
         {
                  t = (u8)(nms/65U);          /* if nms=16640, then t=256, U8 max=255 */

                  t--;
                  while( t > 0U)
                  {
                          delay_us(65000);      /* U16 max= 65535 */
                          t--;
                  }

                  nms = nms%65U;
         }

         delay_us(nms*1000U);
}[/mw_shl_code]

不知道执行的延时的准确性 如何?

此外, 函数void delay_us(u16 nus)  的注释:
/*    延时nus
    延时时间=(fac_us*4+4)*nus*(T)
    其中,T为CPU运行频率(Mhz)的倒数,单位为us.
    ......

    这里的 “单位为us” 是指函数的参数的单位是微秒还是CPU的运行频率的倒数?

承蒙各位大神指教!

回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-7-17
在线时间
4 小时
发表于 2017-7-17 11:48:47 | 显示全部楼层
太帅了  正好想用 不用TIM4了
回复 支持 反对

使用道具 举报

20

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2015-11-28
在线时间
89 小时
发表于 2017-10-17 18:14:27 | 显示全部楼层
原子哥~ 有stvd的么?  没用过iar的
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-8-6
在线时间
1 小时
发表于 2017-10-24 15:36:59 | 显示全部楼层
STM8S的系统文件(包括sys.c,delay.c和uart.c三个文件),可否提供下,楼主?email:iapyglide_2118@163.com
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-3-12
在线时间
23 小时
发表于 2018-3-12 09:47:35 | 显示全部楼层
编译都能过,就是延时不能运行卡在开头。把整个汇编拆开写,编译就提示DELAY_XUS,DELAY_US_1没有定义。其他人也有不能运行的。原因有没顶左边起始的,未设置正确频率的,我都没有。但是就是不能运行。
延时函数.jpg
回复 支持 反对

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-3-12
在线时间
23 小时
发表于 2018-3-13 10:32:25 | 显示全部楼层
void delay_ms(u32 nms);是32位,如果调用delay_ms填的是整数,比如delay_ms(10)或者delay_ms(1000),到函数内部

void Delay_ms(u32 nms)
{
u8 t;
if(nms>65)
{
  t=nms/65;
  while(t--)Delay_us(65000);
  nms=nms%65;
}
Delay_us(nms*1000);
}
nms会溢出,基本都是6553XXXX,int型整数就变的不可知了。只有设置成u16 nms才正常
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-12-28
在线时间
5 小时
发表于 2018-12-29 00:14:58 | 显示全部楼层
原子哥   求uart.c 和uart.h 文件
回复 支持 反对

使用道具 举报

13

主题

85

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
金钱
1897
注册时间
2016-8-20
在线时间
238 小时
发表于 2019-1-7 14:33:40 | 显示全部楼层
移植上去了,效果很好,就是不知道跑低功耗的时候,最低8M是不是有点太高了
回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2018-4-25
在线时间
45 小时
发表于 2019-4-2 09:08:08 | 显示全部楼层
打个卡学习一下
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2013-5-10
在线时间
49 小时
发表于 2019-6-12 22:12:56 | 显示全部楼层
为什么我的不行?Error[As001]: Invalid syntax
回复 支持 反对

使用道具 举报

0

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2012-6-27
在线时间
69 小时
发表于 2019-6-13 10:46:39 | 显示全部楼层
学习 一下
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2020-3-14
在线时间
4 小时
发表于 2020-3-19 12:32:59 | 显示全部楼层
原子哥,小弟想问问这个延时可以作为模拟iic的延时源吗
回复 支持 反对

使用道具 举报

10

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2015-5-19
在线时间
23 小时
发表于 2021-2-19 15:23:07 | 显示全部楼层
cronus 发表于 2018-3-12 09:47
编译都能过,就是延时不能运行卡在开头。把整个汇编拆开写,编译就提示DELAY_XUS,DELAY_US_1没有定义。其 ...

兄弟,我也遇到这个问题,你最后解决了吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-15 04:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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