1.8-1.11:个人APP更新,复习旧抓包知识
1.12:学习Androaid Studio,相对布局和线性布局
相对布局比较重要的就是能相对其他控件排布
1.13-1.22:在stm32上重做的badapple
期间学了:
C语言 对象 了解了一下
重载函数 了解了一下
GFX_ssd1306 和 u8g2 库读取位图数据不同,前者是逐行式顺向,后者是逐行式逆向
bmp单位图片数据存储方式就是“逐行式顺向”,但是数据是颠倒存储的


notepad++复制16进制00是02(坑爹玩意)
UEditor更好用(列选择),我U盘里面就有
顺手做出一个二进制显示的badapple,相当于逐行式顺向数据转换后的结果
为了把ssd1306的数据转换为u8g2的,写了个“顺向”转“逆向”的程序,纯原创
传输上硬件(HW)比软件(SW)快很多
学长传授知识:




“这样我只需要修改i.p所指向的函数,就可以实现不同的功能。如果你想是其他单片机的同一个外设(例如SPI),只要把i.p改成对应的单片机执行的内容就行”
OLED12864边缘浮空极其容易摔坏,买到手一定要打上胶
测试中波特率最高到1550000,在高会失帧,或者像素点乱飘
同(S)步异(A)步通讯:还不太明白,知道其概念,但是不知道怎么实际测试
F401CCU6 KEY按键是A0接地
在U8g2中如果使用硬件通讯,就不需要填SCL和SDA的IO口输出了,设置好数据传输方式就好了
uint8_t u8x8_byte_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
{
static uint8_t buffer[32];
static uint8_t buf_idx;
static uint8_t *data;
static int addr;
uint8_t byte;
switch(msg)
{
case U8X8_MSG_BYTE_SEND:
data = (uint8_t *)arg_ptr;
while( arg_int >0)
{
buffer[buf_idx++] = *data;
//byte=*data;
data++;
arg_int--;
}
break;
case U8X8_MSG_BYTE_INIT:
break;
case U8X8_MSG_BYTE_SET_DC:
break;
case U8X8_MSG_BYTE_START_TRANSFER:
buf_idx=0;
break;
case U8X8_MSG_BYTE_END_TRANSFER:
addr = u8x8_GetI2CAddress(u8x8);
HAL_I2C_Master_Transmit(&hi2c1, addr, buffer, buf_idx, 100);
//HAL_I2C_Master_Transmit_DMA(&hi2c1, 0x78, buffer, buf_idx);
break;
default:
return 0;
}
return 1;
}
发数据的时候我因为发的一直是指针存的地址,而不是数据,折腾了一天,打脸打脸
我明白了一点问题,在看arduino中u8g2的源码时, HWIIC传输数据只需要事先得到地址,就可以传输。但是HWSPI需要时钟频率,数据传输方式,还有传输模式。三个参数。
但是我怎么找也在HAL库中找不到相关设置
但是单独发送1byte的数据也不需要设置这些,我想可以的原因是
如果只发1byte数据,时钟频率就不需要了
传输方式默认是正确的
传输模式未知,但是应该也是默认正确的
学长说:标准库函数里I2C传输过程如果被外部中断打断会死机
U8g2中IIC和SPI初始化函数不一样啊喂,傻逼甜橙
1.23-1.26:
个人APP更新
2.7:
简单学习逻辑分析仪的使用
数据的长度/采集数据的速度=采集数据的时间