野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 36443|回复: 23

断电再上电程序的运行

[复制链接]
发表于 2018-3-23 16:07:18 | 显示全部楼层 |阅读模式
本帖最后由 旭旭重生 于 2018-4-3 17:00 编辑

问下各位大神,我想让每次上电后画圈的代码都能执行一次,该怎么弄呢?目前的情况是断电后再次上电必须按下复位键才能从头执行,我做了个测试,发现了问题所在。就是断电后重新上电程序一开始就在while循环里面,根本就没有从main函数的第一句代码执行。
360截图18180722345471.jpg
回复

使用道具 举报

发表于 2018-3-23 16:15:53 | 显示全部楼层
放在while(1)前面不行?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 17:48:29 | 显示全部楼层
浪费 发表于 2018-3-23 16:15
放在while(1)前面不行?

前面也不行,必须要按复位键才行
回复 支持 反对

使用道具 举报

发表于 2018-3-24 11:49:47 | 显示全部楼层
变量i,有可能被复用了。你屏蔽掉其他程序,只留截图的程序,再测试,不应该啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 09:56:40 | 显示全部楼层
Greenman_ARM 发表于 2018-3-24 11:49
变量i,有可能被复用了。你屏蔽掉其他程序,只留截图的程序,再测试,不应该啊

我测试了很多次,个人认为是这样的,程序进入while(1)循环后,断电再上电程序直接在while循环里,根本就没有从main函数的第一句开始执行
回复 支持 反对

使用道具 举报

发表于 2018-3-26 13:50:44 | 显示全部楼层
不可能,程序肯定按照一定的逻辑执行,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 18:02:00 | 显示全部楼层
Greenman_ARM 发表于 2018-3-26 13:50
不可能,程序肯定按照一定的逻辑执行,

我想的也不应该是这样,可现象就是这样的,直接断电再上电,这段代码没运行,手机端也连不上,按下复位键一切都OK了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-3 17:01:23 | 显示全部楼层
有哪位大神知道怎么弄吗?
回复 支持 反对

使用道具 举报

发表于 2018-4-4 10:52:58 | 显示全部楼层
断电有断开debugger吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-4 10:58:18 | 显示全部楼层
非谢家之宝树 发表于 2018-4-4 10:52
断电有断开debugger吗?

有,断开了的,不管我怎么测试,它都是这样,上电后就直接进入while循环了,根本就没有从main里面第一句执行
回复 支持 反对

使用道具 举报

发表于 2018-4-4 11:01:09 | 显示全部楼层
主函数前面加个延时试试,话说i为啥要用全局变量啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-4 11:08:38 | 显示全部楼层
非谢家之宝树 发表于 2018-4-4 11:01
主函数前面加个延时试试,话说i为啥要用全局变量啊?

这是整个main函数代码,那个关系不大吧

#include "stm32f10x.h"
#include "./led/bsp_led.h"
#include  "./uart/bsp_uart.h"
#include "./gpio/bsp_gpio.h"

void delay_send(uint16_t count)
{
        for(;count!=1000;count--)
        {
        }
}

int i=1;
int main(void)
{
        led_Config();
        uart_Config();
        gpio_Config();
        Usart_SendString(USARTx,"AT+CIPMUX=1\r\n");               
        delay_send(50000);
        Usart_SendString(USARTx,"AT+CIPSERVER=1,8080\r\n");
        delay_send(50000);
       
        while(1)
        {       
               
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-4 11:10:58 | 显示全部楼层
旭旭重生 发表于 2018-4-4 11:08
这是整个main函数代码,那个关系不大吧

#include "stm32f10x.h"
  1. 如果写成这样,一上电串口打印就能看到一直在循环输出。我是通过这样检测到一上电就是在while循环里的

  2. #include "stm32f10x.h"
  3. #include "./led/bsp_led.h"
  4. #include  "./uart/bsp_uart.h"
  5. #include "./gpio/bsp_gpio.h"

  6. void delay_send(uint16_t count)
  7. {
  8.         for(;count!=1000;count--)
  9.         {
  10.         }
  11. }

  12. int i=1;
  13. int main(void)
  14. {
  15.         led_Config();
  16.         uart_Config();
  17.         gpio_Config();
  18.         
  19.         
  20.         while(1)
  21.         {        
  22.         Usart_SendString(USARTx,"AT+CIPMUX=1\r\n");               
  23.         delay_send(50000);
  24.         Usart_SendString(USARTx,"AT+CIPSERVER=1,8080\r\n");
  25.         delay_send(50000);
  26.         }
  27. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2018-4-4 11:19:02 | 显示全部楼层
你在初始化和串口发送间加个延时看看,有可能是数据丢失了,现在东西不在手边,没办法帮你测。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-4 18:37:11 | 显示全部楼层
非谢家之宝树 发表于 2018-4-4 11:19
你在初始化和串口发送间加个延时看看,有可能是数据丢失了,现在东西不在手边,没办法帮你测。。。。

不行,试了好几次
回复 支持 反对

使用道具 举报

发表于 2018-4-5 11:22:06 | 显示全部楼层
旭旭重生 发表于 2018-4-4 18:37
不行,试了好几次

我试了下,发现我的可以在while前输出到串口的啊
  1. int main(void)
  2. {
  3.         UART_DEBUG_Config();
  4.         UART_SendString(DEBUG_USART1,        "USART通信测试!\n");
  5.         while(1);
  6. }
复制代码

你有没有勾选debugger里面的reset in run?
回复 支持 反对

使用道具 举报

发表于 2018-4-5 11:24:10 | 显示全部楼层
还有就是usb转串口也有可能出现这个问题,就是丢失部分数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-12 09:17:44 | 显示全部楼层
非谢家之宝树 发表于 2018-4-5 11:22
我试了下,发现我的可以在while前输出到串口的啊

你有没有勾选debugger里面的reset in run?

勾选了的,没断电,下载完程序后都可以运行,但掉电后重新上电就必须按下复位键才行
回复 支持 反对

使用道具 举报

发表于 2018-4-12 13:31:47 | 显示全部楼层
旭旭重生 发表于 2018-4-12 09:17
勾选了的,没断电,下载完程序后都可以运行,但掉电后重新上电就必须按下复位键才行

难道你的复位电路出问题了???
回复 支持 反对

使用道具 举报

发表于 2018-4-12 15:31:46 | 显示全部楼层

还有你这个程序并没有证明while前面的语句没有执行啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-12 17:50:34 | 显示全部楼层
非谢家之宝树 发表于 2018-4-12 15:31
还有你这个程序并没有证明while前面的语句没有执行啊

不,我是这样检测的,代码里面还有个中断函数,用的usart,掉电后再上电我用蓝牙控制板子上面的灯,是可以的,这个不需要按下复位键。
回复 支持 反对

使用道具 举报

发表于 2018-4-13 08:15:28 | 显示全部楼层
旭旭重生 发表于 2018-4-12 17:50
不,我是这样检测的,代码里面还有个中断函数,用的usart,掉电后再上电我用蓝牙控制板子上面的灯,是可 ...

这样也不能证明没有执行初始化函数啊
回复 支持 反对

使用道具 举报

发表于 2018-4-15 14:39:45 | 显示全部楼层
不科学,没道理的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-17 21:17:49 | 显示全部楼层
jianghong 发表于 2018-4-15 14:39
不科学,没道理的

我也是这么认为的,可事实就这样,一直搞不定,放弃了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 10:33 , Processed in 0.063603 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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