你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

烧录完成后无反应

[复制链接]
u15137456830 提问时间:2021-2-10 11:14 /
STM32103C8T6芯片,用的0.96寸IIC OLED,烧录(st-link)完后OLED屏不亮,板子没有任何反应(做的是一个平衡小车)。 然而在烧录进去测试OLED的程序后屏幕可以正常点亮显示内容。keli显示烧录成功但是板子屏幕啥的一点反应都没有,就板子上的两个电源LED灯亮,给孩子急坏了,请各位大佬前辈给看看该如何排查问题和解决问题? 以下是测试OLED的代码(main c):
/************************************************************************** 作  者 :大鱼电子 淘宝地址:[url]https://shop119207236.taobao.com[/url]  微信公众号【大鱼机器人】 后台回复【平衡小车】:获取平衡小车全套DIY资料 后台回复【电子开发工具】:获取电子工程师必备开发工具 后台回复【电子设计资料】:获取电子设计资料包  知乎:张巧龙 **************************************************************************/#include "sys.h"/***************OLED的IO接口**************************                                                                GND   电源地                                                                VCC   接5V或3.3v电源                                                                SCL   接PB8(SCL)                                                                SDA   接PB9(SDA) ****************OLED的IO接口**************************/int main(void)        {         delay_init();                               //=====延时函数初始化                NVIC_Configuration();                                         //=====中断优先级分组        uart1_init(128000);                   //=====串口1初始化        LED_Init();                    //=====初始化与 LED 连接的IO        KEY_Init();                    //=====按键初始化        OLED_Init();                   //=====OLED初始化        OLED_Clear();                                                                         //=====OLED清屏  while(1)                {                        delay_ms(50);                                                                                                  //=====50ms刷新一次屏幕即可,不需要一直刷新。                        OLED_ShowString(0,4,"DAYUTC OLED Test ",12);                        LED=~LED;        }         }
以下是烧录完板子和OLED屏无反应的代码(main c):
#include "sys.h"#include "LED.h"#include "nrf24l01.h"#include "spi.h"
#define LED_ON  GPIO_ResetBits(GPIOC,GPIO_Pin_13);   #define LED_OFF   GPIO_SetBits(GPIOC,GPIO_Pin_13);
float Voltage;                                                                                                                           //电池电压采样相关的变量float pitch,roll,yaw;                                                                                            //欧拉角(姿态角)short aacx,aacy,aacz;                                                                                                         //加速度传感器原始数据short gyrox,gyroy,gyroz;                                                                                         //陀螺仪原始数据float UltrasonicWave_Distance;                 //超声波测距int   Encoder_Left,Encoder_Right;                          //左右编码器的脉冲计数int         Moto1=0,Moto2=0;                                                                                                 //计算出来的最终赋给电机的PWMint         Flag_Qian,Flag_Hou,Flag_Left,Flag_Right; //蓝牙遥控相关的变量u8    flag_UltrasonicWave=0;                                                                         //超声波是否超出安全距离标志位u8    key=0;                                                                                                                                          //按键的键值u8 rx_buf[33];u16 speed,rotate;signed char Count1,Count2;float pitch,roll,yaw;                 //欧拉角
void RxHandle(){        if(NRF24L01_RxPacket(rx_buf)==0)//一旦接收到信息,则显示出来. {        rx_buf[32]='\0';//加入字符串结束符LED1_ON;                                                memmove(&rotate,&rx_buf[6] ,2);        memmove(&pitch, &rx_buf[8] ,4);        memmove(&roll,  &rx_buf[12],4);        memmove(&yaw,   &rx_buf[16],4);         if(rx_buf[2]=='1') Flag_Qian=1;else Flag_Qian=0;         if(rx_buf[3]=='1') Flag_Hou=1;else Flag_Hou=0;         if(rotate>2500) Flag_Left=1; else Flag_Left=0;         if(rotate<1500) Flag_Right=1;else Flag_Right=0;        LED_ON;                        delay_ms(500);        LED_OFF;        delay_ms(500);
                                                                  }        }
int main(void)        {         delay_init();                               //=====延时函数初始化                NVIC_Configuration();                                         //=====中断优先级分组,其中包含了所有的中断优先级的配置,方便管理和一次性修改。        NRF24L01_Init();        NRF24L01_RX_Mode();                        Adc_Init();                    //=====初始化ADC        Encoder_Init_TIM2();           //=====初始化编码器2        Encoder_Init_TIM4();           //=====初始化编码器4        Timer3_Init(5000,7199);                     //=====超声波定时器初始化                LED_GPIO_Config();
                OLED_Init();                   //=====OLED初始化        OLED_Clear();                                                                         //=====OLED清屏        MPU_Init();                                                                     //=====初始化MPU6050        mpu_dmp_init();                                                                 //=====初始化MPU6050的DMP模式                                                 UltrasonicWave_Configuration();//=====初始化超声波的硬件IO口        TIM1_PWM_Init(7199,0);                            //=====初始化PWM 10KHZ,用于驱动电机。         Motor_Init();                                                                         //=====初始化与电机连接的硬件IO接口         MPU6050_EXTI_Init();                                         //=====MPU6050 5ms定时中断初始化        oled_first_show();                                           //只需要显示一次的字符,在此刷新一次即可。                while(NRF24L01_Check())         //检测NRF24L01是否存在        {                LED_ON;                delay_ms(200);                LED_OFF;                delay_ms(200);                        }        NRF24L01_RX_Mode();       
RxHandle();  while(1)                {         RxHandle();
                oled_show();                delay_ms(50); //20HZ的显示频率,屏幕无需时刻刷新。        }         }




收藏 评论8 发布时间:2021-2-10 11:14

举报

8个回答
老牛洋车 回答时间:2021-2-20 10:20:13
    烧录其他程序可以用,而烧录自己的程序无反映,证明硬件及烧录操作基本无问题,问题应该出在自己的程序上。初次上手建议不要弄的太复杂,先在范例的基础上逐步添加自己的代码,每次修改后便烧录测试,成功后再继续添加。
大陶 回答时间:2021-2-20 10:30:38
应该是程序问题,你可以仿真看一下,什么反应都没有 怀疑进入了 HardFault里面,或者一直等待某些标志位置1,以至于都没有进入主程序里面跑起来。
网络孤客 回答时间:2021-2-20 12:47:09
按复位键后能正常运行吗?
排一下版,源码看得很辛苦。
或把源码发上来。
慎微 回答时间:2021-2-20 13:47:32
可以这样调试:
1)测试单独 OLED 驱动,是否点亮OLED?不行设法比较厂家提供程序,哪里不对。
2)再添加一个功能模块,试下OK,再加下个功能模块
freeelectron 回答时间:2021-2-20 14:28:23
单步调试看看,另外量一下rst引脚的电平
sylar.z 回答时间:2021-2-22 09:21:41
OLED测试代码可正常显示,说明硬件没问题。应用程序只有两个电源LED灯亮,有可能程序跑起来了,但是OLED初始化设置失败了。I2C的OLED,在初始化参数设置时有些参数间需要加延时,若延时时间不够,会导致部分参数未设置成功,进而导致OLED因初始化失败而点不亮
butterflyspring 回答时间:2021-3-1 11:45:22
单步调能看出非硬件的几乎所有原因。看看是不是哪里影响到调试口了,解决了这个问题后其他问题就容易发现和解决了
废鱼 回答时间:2021-3-1 14:29:04
检查时钟配置,经常容易出错的地方:程序中默认25Mhz,实际使用8Mhz等等。建议购买一个仿真器,没多少钱。在线调试,确定是不是可以执行。还有就是程序的烧写地址等。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版