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的显示频率,屏幕无需时刻刷新。
}
}