发新帖我要提问
123
返回列表
打印

温度对于GD32F103C8T6芯片的影响

[复制链接]
楼主: miaomiaode
手机看帖
扫描二维码
随时随地手机跟帖
41
本帖最后由 zkcaptain 于 2013-10-21 15:05 编辑

我还有几个问题想问下楼主:
1.楼主是用什么方法得出:GD的i=14;while(i--);大约就是1us,是编译成汇编看的吗?
2.楼主之前用的自减延迟中的i等于多少?
3.系统时钟是多少?72Mhz?还是别的?
还有我觉得DS18B20对时序的要求不会那么严格。。

使用特权

评论回复
42
么么沫沫| | 2013-10-21 15:24 | 只看该作者
STC测温,MARK

使用特权

评论回复
43
miaomiaode|  楼主 | 2013-10-21 15:31 | 只看该作者
zkcaptain 发表于 2013-10-21 14:42
我还有几个问题想问下楼主:
1.楼主是用什么方法得出:GD的i=14;while(i--);大约就是1us,是编译成汇编看的 ...

示波器抓的,软件上可能没那么准,对于系统时钟是移植了STM32F103V8T6的程序,是72M,但是奇怪的是一样的i(i值相同)延迟程序,结果STM32延迟比GD32的长,这点我比较郁闷。这个也就个大约延迟,没有那么严格,无需较真

使用特权

评论回复
44
zkcaptain| | 2013-10-21 15:54 | 只看该作者
本帖最后由 zkcaptain 于 2013-10-21 15:58 编辑
miaomiaode 发表于 2013-10-21 15:31
示波器抓的,软件上可能没那么准,对于系统时钟是移植了STM32F103V8T6的程序,是72M,但是奇怪的是一样的 ...


我只是想帮你找到原因,别介意。

因为GD的MCU读取Flash的速度比ST的要快,这个跟GD的Flash技术有关,论坛也有提到,所以在执行同样的代码情况下,GD的效率会高一些,反映到延迟函数上,就是同样的代码,ST延迟2ms,或许GD就只延迟了1.x ms。

所以我想知道你的延迟都用了多少,或许正因为上面的原因,再加上你的延迟刚好卡在DS18B20的时序节点上,才造成了误码的产生。因此最好你在找到GD的精确延迟时间的基础上,根据DS18B20的时序来设定延迟,保证一定的延迟宽裕度。

使用特权

评论回复
45
miaomiaode|  楼主 | 2013-10-21 16:22 | 只看该作者
zkcaptain 发表于 2013-10-21 15:54
我只是想帮你找到原因,别介意。

因为GD的MCU读取Flash的速度比ST的要快,这个跟GD的Flash技术有关,论 ...

没关系,现在你这么一说明朗了很多,刚接触不是太懂
精确延迟用systick延迟确实好,就是好比一个RTC中断中调用systick延迟,由于优先级的原因,程序就会死在systick上(这样的问题社区里提的很多,就没没看见解决之道),有机会再想想办法。

使用特权

评论回复
46
zkcaptain| | 2013-10-23 15:49 | 只看该作者
miaomiaode 发表于 2013-10-21 15:31
示波器抓的,软件上可能没那么准,对于系统时钟是移植了STM32F103V8T6的程序,是72M,但是奇怪的是一样的 ...

这个我又测了一下,也是用示波器,确实延迟不一样,在72Mhz下,

ST的芯片1us执行11.63次i--,也就是i=11.63时,Delay是1us
而GD的芯片1u执行17.85次i--,也就是i=17.85时,Delay是1us

使用特权

评论回复
47
zkcaptain| | 2013-10-23 15:59 | 只看该作者
本帖最后由 zkcaptain 于 2013-10-23 16:05 编辑
miaomiaode 发表于 2013-10-21 16:22
没关系,现在你这么一说明朗了很多,刚接触不是太懂
精确延迟用systick延迟确实好,就是好比一个RTC中断 ...


这个方法或许能帮到你,systick延迟,相当于查询法,不进入systick中断,优点是不进中断,延迟精确:
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD = 9*nus;
SysTick->VAL=0X00;//清空计数器
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
do
{
  temp=SysTick->CTRL;//读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
     SysTick->CTRL=0x00; //关闭计数器
    SysTick->VAL =0X00; //清空计数器
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD = 9000*nms;
SysTick->VAL=0X00;//清空计数器
SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
do
{
  temp=SysTick->CTRL;//读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
    SysTick->CTRL=0x00; //关闭计数器
    SysTick->VAL =0X00; //清空计数器
}

使用特权

评论回复
48
miaomiaode|  楼主 | 2013-10-23 17:45 | 只看该作者
zkcaptain 发表于 2013-10-23 15:49
这个我又测了一下,也是用示波器,确实延迟不一样,在72Mhz下,

ST的芯片1us执行11.63次i--,也就是i=11 ...

你这个是延迟了10us或是100us这样再整除的结果吗?
我用的程序其中14没法搞成小数形式,什么强制转换都试过了,若你的是小数形式的,可否给下程序?
void delay_us(__IO u16 nTime)
{
        nTime=nTime*14;
        while(--nTime);
}
这个程序可以大概的实现延迟多少us

使用特权

评论回复
49
zkcaptain| | 2013-10-23 18:02 | 只看该作者
本帖最后由 zkcaptain 于 2013-10-23 18:05 编辑
miaomiaode 发表于 2013-10-23 17:45
你这个是延迟了10us或是100us这样再整除的结果吗?
我用的程序其中14没法搞成小数形式,什么强制转换都试 ...

我的i=500,i--减完500次是28us,500/28us就是17.85,至于小数,100us以下的延迟只能四舍五入了。本来靠这种方法就没法做到那么精确。

有空了试试那个systick不进中断的延迟吧,期待你的实验结果,哈哈

使用特权

评论回复
50
miaomiaode|  楼主 | 2013-10-23 20:57 | 只看该作者
zkcaptain 发表于 2013-10-23 18:02
我的i=500,i--减完500次是28us,500/28us就是17.85,至于小数,100us以下的延迟只能四舍五入了。本来靠这 ...

程序不错啊!有时间试试,带中断的优先级也已设定好,可以在stm32f103中运行正常,就是在stm32f100系列中无法延迟1us等较短时间,10us的却可以,可能是硬件之类的问题。

使用特权

评论回复
51
miaomiaode|  楼主 | 2013-10-24 11:56 | 只看该作者
zkcaptain 发表于 2013-10-23 15:59
这个方法或许能帮到你,systick延迟,相当于查询法,不进入systick中断,优点是不进中断,延迟精确:
voi ...

这种查询方式的延迟比较好,避开了中断的方式,程序可以运行

使用特权

评论回复
52
张亚杰| | 2013-10-24 17:02 | 只看该作者
楼主怎么测试的呢?和官方的给的曲线差了多少呢

使用特权

评论回复
53
miaomiaode|  楼主 | 2013-10-24 22:13 | 只看该作者
张亚杰 发表于 2013-10-24 17:02
楼主怎么测试的呢?和官方的给的曲线差了多少呢

有数据就行,非专业

使用特权

评论回复
54
黄晨| | 2013-10-30 22:29 | 只看该作者
不错不错

使用特权

评论回复
55
zhangmangui| | 2013-11-26 23:50 | 只看该作者
外部晶振  这么牛X

使用特权

评论回复
56
miaomiaode|  楼主 | 2013-12-3 10:18 | 只看该作者
zhangmangui 发表于 2013-11-26 23:50
外部晶振  这么牛X

用的是外部晶振

使用特权

评论回复
57
huangjia22| | 2013-12-22 10:03 | 只看该作者
很奇怪啊

使用特权

评论回复
58
luoxiaobing| | 2013-12-22 10:11 | 只看该作者
高低温测试要花不少钱吧?我都没有钱买设备的

使用特权

评论回复
59
zhouli09| | 2013-12-22 12:02 | 只看该作者
等级是不是一样的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则