0.单片机调试方式:
串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上
Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能
点灯调试法
注释调试法
对照法
1.OLED简介:
OLED(Organic Light Emitting Diode):有机发光二极管
OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点
0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64
I2C通信
SPI通信
2.硬件电路
3.OLED驱动函数
函数 | 作用 |
OLED_Init(); | 初始化 |
OLED_Clear(); | 清屏 |
OLED_ShowChar(1, 1, 'A'); | 显示一个字符 |
OLED_ShowString(1, 3, "HelloWorld!"); | 显示字符串 |
OLED_ShowNum(2, 1, 12345, 5); | 显示十进制数字。若长度比数字长度大,在前面补0;若小,则把高位数据切掉 |
OLED_ShowSignedNum(2, 7, -66, 2); | 显示有符号十进制数字 |
OLED_ShowHexNum(3, 1, 0xAA55, 4); | 显示十六进制数字 |
OLED_ShowBinNum(4, 1, 0xAA55, 16); | 显示二进制数 |
例:
OLED_Init();
OLED_ShowChar(1,1,'A');
OLED_ShowString(1,3,"HelloWorld!");
OLED_ShowNum(2,1,211314,5);//长度比数字长度大,前面补0;长度比数字长度小,切掉高位
OLED_ShowSignedNum(2,7,12345,4);
OLED_ShowHexNum(3,1,0xAA55,4);
OLED_ShowBinNum(4,1,0xAA55,16);//C标准不支持二进制
OLED_Clear();//清屏
OLED_ShowString(1,3," ");//清除1行3格的字符
4.OLED显示程序
也可以直接用GPIO口供电,PB6低电平,PB7高电平
找到OLED的三个驱动函数
只需要更改 引脚配置、引脚初始化 两部分即可
oled.c
#include "stm32f10x.h"
#include "OLED_Font.h"
/*引脚配置*/
#define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))
#define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))
/*引脚初始化*/
void OLED_I2C_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//I2C标准就是开漏输出模式,解释详见CSDN博客
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOB, &GPIO_InitStructure);
OLED_W_SCL(1);
OLED_W_SDA(1);
}
补充:为什么用开漏输出
这是I2C的电路规范,解决多级通信互相干扰的问题。
因为开漏输出高电平呈现“断开”,这样就相当于断开与CPU连接,不会干扰其他设备。
而开漏输出高电平没有驱动能力,在SCL\SDA各自设置1个上拉电阻。
这样开漏+上拉电阻-->实现 线与 功能
/********************************************/
keil自带在线调试功能 自己探索