OpenEdv-开源电子网

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

急,stm32 按键复位后 才正常运行

[复制链接]

15

主题

34

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2015-8-15
在线时间
17 小时
发表于 2016-10-8 17:09:35 | 显示全部楼层 |阅读模式
10金钱
师兄们 最近我遇到一个很奇怪的问题,就是按复位键后 单片机才正常运行(仿真也能正常运行),下载其他程序就能正常运行!很纳闷……实在想不到问题出在哪

学习没有捷径,唯有坚持不懈!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2016-10-8 17:10:26 | 显示全部楼层
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-10-8 17:14:49 | 显示全部楼层
是不是这个没有点
QQ图片20161008171400.png
回复

使用道具 举报

15

主题

34

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2015-8-15
在线时间
17 小时
 楼主| 发表于 2016-10-8 18:35:19 | 显示全部楼层
都设置了的 !
学习没有捷径,唯有坚持不懈!
回复

使用道具 举报

15

主题

34

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2015-8-15
在线时间
17 小时
 楼主| 发表于 2016-10-8 18:38:02 | 显示全部楼层
//***********************************************************//
//***************************motor.c*************************//
//***********************************************************//
#include "sys.h"
#include "motor.h"
#include "sys_tick.h"
#include "usart.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "mystring.h"
#include "delay.h"

#define  FW_Ratio   375        // 方位比例
s16  FW_Max_Speed = 240;          // 0.1°/s
const  s16   FW_Motor_Acc = 500;
volatile s32  old_fwspeed = 0;
void  motorinit(void);
void Set_FWSpeed(s32 ispeed);
void Set_Channel_NVIC(u8 NVIC_Channel, u8  Priority);//设置中断
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
////*********   方位 孔子和    *************8
void Motor_Init(void)
{
        GPIOB->CRH &= ~(((u32)(0xffff))<<16);         //PB12 ~ PB15  通用推挽
        GPIOB->CRH |= 0x3333 << 16;
        GPIOD->CRH &= ~(0xff);               //PD8/PD9 通用推挽
        GPIOD->CRH |= 0x33;
        ////////////////////////////
        ////*****  T5  **************
        RCC->APB1ENR |= 8;   //使能TIM5时钟
        TIM5->CR1  |= 1<<4;     //向下计数
        TIM5->DIER  = 0;
        TIM5->DIER |= 1;        //允许更新中断  
        TIM5->PSC = 11;       ///72 /(11+1) = 6M T2时钟;
        Set_Channel_NVIC(50, 3);//低优先级1
        ////////////////////////////
        ////*****  T2  **************
}
////---------------------------------------------------------------------------
////*********     *************8
//电机最低速度 1.512°/s  , 0.0042转/s
void Set_FWSpeed(s32 ispeed)  //0.1°/s
{
        s32 tempspeed=0;
    u8  speeddatastr[16]={0};
    u8  temp_speeddatastr[6]={0};
//        char speedTemp;
        speeddatastr[0]  = 0X73;        // 's'
        speeddatastr[1]  = 0X20;        // ' '
        speeddatastr[2]  = 0X72;        // 'r'
        speeddatastr[3]  = 0X30;    // '0'
        speeddatastr[4]  = 0X78;        // 'x'
        speeddatastr[5]  = 0X32;        // '2'
        speeddatastr[6]  = 0X66;        // 'f'
        speeddatastr[7]  = 0X20;        // ' '
//        speeddatastr[8]  = 'D';     //速度方向位
    speeddatastr[9]  = 0X30;        // '0'
        speeddatastr[10] = 0X30;        // '0'
        speeddatastr[11] = 0X30;        // '0'
        speeddatastr[12] = 0X30;    // '0'
        speeddatastr[13] = 0X30;        // '0'
        speeddatastr[14] = 0X30;        // '0'
        speeddatastr[15] = 0x0D;        // ' '
        if      (FW_Max_Speed  < ispeed)
                ispeed = FW_Max_Speed;
        else if        (-FW_Max_Speed > ispeed)
                ispeed = -FW_Max_Speed;
        old_fwspeed = ispeed;
        if(0 < ispeed)
                {
                    speeddatastr[8] = 0x2D;          
                }
        else
                {
                        speeddatastr[8] = 0x30;       
                }                                                   
        tempspeed =(abs(ispeed) *6250/3 );   //转换为电机速度 转/s,减速度比为 1:375
        my_itoa(tempspeed, temp_speeddatastr, 10) ;
        speeddatastr[9]  = temp_speeddatastr[0];        // '0'
        speeddatastr[10] = temp_speeddatastr[1];        // '0'
        speeddatastr[11] = temp_speeddatastr[2];        // '0'
        speeddatastr[12] = temp_speeddatastr[3];    // '0'
        speeddatastr[13] = temp_speeddatastr[4];        // '0'
        speeddatastr[14] = temp_speeddatastr[5];        // '0'
        Uart4_Send1(&speeddatastr[0] , 16);
}
void Driver_Init()
{
    char EN_D_Cmd[11] ={0x73,0x20,0x72,0x30,0x78,0x32,0x34,0x20,0x31,0x31,0x0d};
        char ACC_D_Cmd[11] ={0x73,0x20,0x72,0x30,0x78,0x33,0x36,0x20,0x35,0x30,0x0d};
        char DEC_D_Cmd[11] ={0x73,0x20,0x72,0x30,0x78,0x33,0x37,0x20,0x35,0x30,0x0d};
        Uart4_send_str(&EN_D_Cmd[0],11);
        SysTimeCnt = 0;
        while(200 > SysTimeCnt);
        SysTimeCnt = 0;
        Uart4_send_str(&EN_D_Cmd[0],11);
        SysTimeCnt = 0;
        while(200 > SysTimeCnt);
        SysTimeCnt = 0;
        Uart4_send_str(&EN_D_Cmd[0],11);
        SysTimeCnt = 0;
        while(200 > SysTimeCnt);  
        SysTimeCnt = 0;                                   
        Uart4_send_str(&DEC_D_Cmd[0],11);
        SysTimeCnt = 0;
        while(200 > SysTimeCnt);
        SysTimeCnt = 0;
        Uart4_send_str(&ACC_D_Cmd[0],11);
        SysTimeCnt  = 0 ;
}
void Urgent_Stop_FW()
{
        char STOP_D_Cmd[10] ={0x73,0x20,0x72,0x30,0x78,0x32,0x34,0x20,0x30,0x0d};
        char DEC_D_Cmd[10] ={0x73,0x20,0x72,0x30,0x78,0x33,0x37,0x20,0x31,0x0d};
    SysTimeCnt = 0;                                                           
        Uart4_send_str(&STOP_D_Cmd[0],11);
        while(500 > SysTimeCnt);  
        SysTimeCnt = 0;
        while(500 > SysTimeCnt);
        SysTimeCnt = 0;
        Uart4_send_str(&DEC_D_Cmd[0],10);
}
下面是主函数
//****************************************************************//
//****************************   main.c  *************************//
//****************************************************************//

#include  <stm32f10x_lib.h>
#include  <stdlib.h>
#include  "sys.h"
#include  "main.h"         
#include  "peripheral.h"
#include  "motor.h"
#include "usart.h"
int main(void)
{       
        s16  ispeed =-120;
        SysTimeCnt = 0;
        Sys_Init();        //cpu 系统初始化,时钟、中断等       
        Peripheral_Init();           //MCU外设接口初始化,uart, pwm, timer,spi等
        TIM_Timer_Init();
        Motor_Init();
        Uart_Init();
    Driver_Init();
        while(1)
        {               
                if(SysTimeCnt >=200)
                {
                        SysTimeCnt = 0;
                        Set_FWSpeed(ispeed);
                }
        }
}
学习没有捷径,唯有坚持不懈!
回复

使用道具 举报

15

主题

34

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2015-8-15
在线时间
17 小时
 楼主| 发表于 2016-10-8 18:39:35 | 显示全部楼层
必须要按复位键 stm32 才正常运行,否则不运行!
学习没有捷径,唯有坚持不懈!
回复

使用道具 举报

5

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-8-5
在线时间
14 小时
发表于 2017-5-25 11:01:52 | 显示全部楼层
jackiesunhao 发表于 2016-10-8 18:39
必须要按复位键 stm32 才正常运行,否则不运行!

我也是 ,到底是怎么回事
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
发表于 2017-5-26 12:26:27 来自手机 | 显示全部楼层
我跟你相反,这是复位后不能运行了,真奇怪
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-30 18:40:08 | 显示全部楼层
仿真找下问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-7-6
在线时间
0 小时
发表于 2017-7-6 17:39:09 | 显示全部楼层
lz找到原因了吗,我也是这个问题
回复

使用道具 举报

15

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2019-1-10
在线时间
32 小时
发表于 2020-9-1 16:40:57 | 显示全部楼层
楼主,你解决了吗,我也遇到了同样的问题。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-18
在线时间
1 小时
发表于 2020-11-13 16:22:14 | 显示全部楼层
jackiesunhao 发表于 2016-10-8 18:39
必须要按复位键 stm32 才正常运行,否则不运行!

在程序delay初始化之后,外设初始化之前,加个100ms延时。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-18
在线时间
1 小时
发表于 2020-11-13 16:22:46 | 显示全部楼层
sukie 发表于 2020-9-1 16:40
楼主,你解决了吗,我也遇到了同样的问题。

在程序delay初始化之后,外设初始化之前,加个100ms延时。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-7-18
在线时间
1 小时
发表于 2020-11-13 16:23:09 | 显示全部楼层
求清则戏L 发表于 2017-7-6 17:39
**** 作者被禁止或删除 内容自动屏蔽 ****

在程序delay初始化之后,外设初始化之前,加个100ms延时。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 07:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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