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:
简单学习逻辑分析仪的使用
数据的长度/采集数据的速度=采集数据的时间