燒錄完平衡小車程式后板子和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的顯示頻率,螢屏無需時刻重繪。
}
}
uj5u.com熱心網友回復:
請各位大佬前輩看看是哪里出了問題 ?給孩子急壞了。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258569.html
標籤:單片機/工控
