STM32103C8T6 用keli5烧录后 板子和OLED屏无反应

燠阳载临 2021-02-10 05:16:25
烧录完平衡小车程序后板子和OLED无反应(keli5提示烧录成功)。但是烧录OLED测试程序OLED正常显示。STM32103C8T6 芯片用keli5 st-link烧录的。

以下是测试OLED的代码:

#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;
}
}



以下是平衡小车的代码(烧录后无反应):

#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; //计算出来的最终赋给电机的PWM
int 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的显示频率,屏幕无需时刻刷新。
}
}




...全文
1697 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
燠阳载临 2021-02-23
  • 打赏
  • 举报
回复
引用 3 楼 WooSir 的回复:
OLED程序很可能只用几个单片机管脚,你这个平衡小车程序用的东西多,估计配置的管脚和OLED有冲突,所以不显示了。可能性较大的是NRF24L01
请问这种情况该如何解决呢,大佬? 我是按照别人的一套模板做的,没想到还能出现各种问题,直到这个问题已经让我困在原地好多天了。 您在空闲时能帮我一下吗?
WooSir 2021-02-21
  • 打赏
  • 举报
回复
OLED测试程序很可能只用几个单片机管脚,你这个平衡小车程序用的东西多,估计配置的管脚和OLED有冲突,所以不显示了。可能性较大的是NRF24L01
态度君 2021-02-19
  • 打赏
  • 举报
回复
debug看是否能进while(1)下面的语句
燠阳载临 2021-02-10
  • 打赏
  • 举报
回复
请各位大佬前辈看看是哪里出了问题 ?给孩子急坏了。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧