野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10164|回复: 18

折磨人的问题

[复制链接]
发表于 2016-8-11 10:55:35 | 显示全部楼层 |阅读模式
用流水灯的基础程序写ds18b20的程序,当然都是黏贴复制,串口弄好了,把DS18B20_Init();复制上后串口就不能用了,求大神指点。
回复

使用道具 举报

发表于 2016-8-11 11:01:02 | 显示全部楼层
学会用硬件仿真,看程序卡死在哪里或者在不同的地方嵌入prtintf输出
回复 支持 反对

使用道具 举报

发表于 2016-8-11 11:09:49 | 显示全部楼层
flyleaf 发表于 2016-8-11 11:01
学会用硬件仿真,看程序卡死在哪里或者在不同的地方嵌入prtintf输出

这个有必要整理个专贴,,,,好些初学者都忽视了这点
回复 支持 反对

使用道具 举报

发表于 2016-8-11 11:19:27 | 显示全部楼层
Mr.Guo 发表于 2016-8-11 11:09
这个有必要整理个专贴,,,,好些初学者都忽视了这点

版主整理一个,方便大家学习
回复 支持 反对

使用道具 举报

发表于 2016-8-11 11:21:21 | 显示全部楼层
你把串口程序,ds18b20程序,还有你整理的不行的程序都发上来
回复 支持 反对

使用道具 举报

发表于 2016-8-11 11:21:47 | 显示全部楼层
还有,帖子标题不能说明帖子内容,下次发帖子的时候注意下,不然我就删贴了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 11:27:12 | 显示全部楼层
flyleaf 发表于 2016-8-11 11:01
学会用硬件仿真,看程序卡死在哪里或者在不同的地方嵌入prtintf输出

谢谢,刚才试了试在一个地方能卡住,但是原程序也会在那里卡住。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 11:28:18 | 显示全部楼层
fire 发表于 2016-8-11 11:21
还有,帖子标题不能说明帖子内容,下次发帖子的时候注意下,不然我就删贴了

我会注意的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 11:31:16 | 显示全部楼层
fire 发表于 2016-8-11 11:21
你把串口程序,ds18b20程序,还有你整理的不行的程序都发上来

这是没反应的那个程序
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_ds18b20.h"
#include "bsp_SysTick.h"
#include "bsp_usart1.h"

/**
  * @brief  Ö÷oˉêy
  * @param  ÎT  
  * @retval ÎT
  */
int main(void)
{       
        /* LED ¶Ë¿ú3õê¼»ˉ */
//        LED_GPIO_Config();         
uint8_t uc, ucDs18b20Id [ 8 ];

SysTick_Init();       
       
USARTx_Config();        //3õê¼»ˉ′®¿ú1
       
DS18B20_Init();
       
//printf("\r\n this is a ds18b20 test demo \r\n");
       
DS18B20_ReadId ( ucDs18b20Id  );           // ¶áè¡ DS18B20 μÄDòáDoÅ
       
printf("\r\nDS18B20μÄDòáDoÅêÇ£o 0x");
       
        //for ( uc = 0; uc < 8; uc ++ )             // ′òó&#161; DS18B20 μ&#196;DòáDo&#197;
        //printf ( "%.2x", ucDs18b20Id [ uc ] );
       
        /* ·&#189;·¨2£&#172;ê1ó&#195;1ì&#188;t&#191;a&#191;&#216;&#214;&#198;IO */
        while (1)
        {
               
        }

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 11:32:36 | 显示全部楼层
fire 发表于 2016-8-11 11:21
你把串口程序,ds18b20程序,还有你整理的不行的程序都发上来

这是没反应的程序
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_ds18b20.h"
#include "bsp_SysTick.h"
#include "bsp_usart1.h"

/**
  * @brief  &#214;÷oˉêy
  * @param  &#206;T  
  * @retval &#206;T
  */
int main(void)
{       
        /* LED &#182;&#203;&#191;ú3&#245;ê&#188;&#187;ˉ */
//        LED_GPIO_Config();         
uint8_t uc, ucDs18b20Id [ 8 ];

SysTick_Init();       
       
USARTx_Config();        //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1
       
DS18B20_Init();
       
//printf("\r\n this is a ds18b20 test demo \r\n");
       
DS18B20_ReadId ( ucDs18b20Id  );           // &#182;áè&#161; DS18B20 μ&#196;DòáDo&#197;
       
printf("\r\nDS18B20μ&#196;DòáDo&#197;ê&#199;£o 0x");
       
        //for ( uc = 0; uc < 8; uc ++ )             // ′òó&#161; DS18B20 μ&#196;DòáDo&#197;
        //printf ( "%.2x", ucDs18b20Id [ uc ] );
       
        /* ·&#189;·¨2£&#172;ê1ó&#195;1ì&#188;t&#191;a&#191;&#216;&#214;&#198;IO */
        while (1)
        {
               
        }

}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 11:34:16 | 显示全部楼层
fire 发表于 2016-8-11 11:21
你把串口程序,ds18b20程序,还有你整理的不行的程序都发上来

这是那个可以的 两个几乎都一样

#include "stm32f10x.h"
#include "bsp_SysTick.h"
#include "bsp_led.h"
#include "bsp_usart1.h"
#include "bsp_ds18b20.h"




int main(void)
{       
        uint8_t uc, ucDs18b20Id [ 8 ];
       
       
        /* &#197;&#228;&#214;&#195;SysTick &#206;a1us&#214;D&#182;&#207;ò&#187;′&#206; */
        SysTick_Init();
       
       
        //LED_GPIO_Config();
       
        USARTx_Config();        //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú1
       
        DS18B20_Init();
        //printf("\r\n this is a ds18b20 test demo \r\n");
       
        //while( DS18B20_Init() )       
               
        //printf("\r\n no ds18b20 exit \r\n");      
       
        //printf("\r\n  ds18b20 exit \r\n");
       
       
        DS18B20_ReadId ( ucDs18b20Id  );           // &#182;áè&#161; DS18B20 μ&#196;DòáDo&#197;
       
        printf("\r\nDS18B20μ&#196;DòáDo&#197;ê&#199;£o 0x");

   while(1)
{}
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 12:41:39 | 显示全部楼层
fire 发表于 2016-8-11 11:21
还有,帖子标题不能说明帖子内容,下次发帖子的时候注意下,不然我就删贴了

我打开led灯,在DS18B20_Init();前面灯亮,放到他后面等就灭了。

有反应的程序是原程序, 不行的那个原本是流水灯的实验,我把他改成的输出温度。
回复 支持 反对

使用道具 举报

发表于 2016-8-11 13:41:25 | 显示全部楼层
校尉 发表于 2016-8-11 12:41
我打开led灯,在DS18B20_Init();前面灯亮,放到他后面等就灭了。

有反应的程序是原程序, 不行的那个 ...

然后再进入到函数DS18b20 init函数里,一直这样找,直到确定它停在哪一句,然后再来分析
回复 支持 反对

使用道具 举报

发表于 2016-8-11 13:42:46 | 显示全部楼层
Mr.Guo 发表于 2016-8-11 11:09
这个有必要整理个专贴,,,,好些初学者都忽视了这点

到时直接录个视频,讲解如何debug

其实我们F4的视频也有的,手打代码,出现错误了,我们也是直接演示怎样硬件调试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 14:03:23 | 显示全部楼层
flyleaf 发表于 2016-8-11 13:41
然后再进入到函数DS18b20 init函数里,一直这样找,直到确定它停在哪一句,然后再来分析

void Delay_us(__IO u32 nTime)
{
        TimingDelay = nTime;       

       
        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;

        while(TimingDelay != 0);
}
是这一句,延迟函数里面出不来了,本来延迟720,我改成1 也不行,光标就在最后一行while语句那里不动了。
回复 支持 反对

使用道具 举报

发表于 2016-8-11 14:25:59 | 显示全部楼层
校尉 发表于 2016-8-11 14:03
void Delay_us(__IO u32 nTime)
{
        TimingDelay = nTime;       

检查一下 it.c 文件里有没有加systick的中断服务函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 14:48:24 | 显示全部楼层
flyleaf 发表于 2016-8-11 14:25
检查一下 it.c 文件里有没有加systick的中断服务函数

哥,亲哥,谢谢,我擦,可以了!
回复 支持 反对

使用道具 举报

发表于 2016-8-11 14:50:44 | 显示全部楼层
校尉 发表于 2016-8-11 14:48
哥,亲哥,谢谢,我擦,可以了!

以后调试程序就这样~,最起码定位的过程你已经掌握了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-11 15:12:50 | 显示全部楼层
flyleaf 发表于 2016-8-11 14:50
以后调试程序就这样~,最起码定位的过程你已经掌握了,

恩恩,谢谢,这个麻烦解决了,后面很顺利,在我的液晶屏上已经将18b20的温度显示出来了,哈哈。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-12 13:15 , Processed in 0.046635 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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