用STM32F103C8T6 做了个核心板,使用软件模拟IIC和12864的OLED屏幕通信,项目中使用CubeMX构建,添加了FreeRTOS。 配置有三个任务,其中,display 任务负责把CACHE中的数据不停的发送给屏幕, 其他二个任务负责给CACHE中写入数据 。 初始化以后,程序运行正确,画线条成功,大约画了40左右条线的时候,就会很慢,感觉象是很卡的样子。 DEBUG发现,这个时候,系统会卡在IIC_Stop 方法上面。。。 #define SCL_L HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET) #define SDA_L HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET) 大约是这二行上面,就不再继续 运行了。。。。 还请大神帮分析问题所在 |
评分
查看全部评分
评分
查看全部评分
使用硬件IIC的话,只怕是需要修改引脚了,但是,板子是别人做好的,引脚 不能修改,可有办法使用硬件IIC ?
IIC通信是会一直持续进行的,这个是由FreeRTOS调度的。我如何来做到禁止中断发生?
至少中断优先级改变一下
至于I2C问题,论坛问的人也不少了,可以搜索参考一下别人回复。同一问题,多次回答比较浪费资源。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
里面有一些我自己写的函数你应该可以直接拿去用
HAL_I2C_Master_Transmit(&hi2c1, 0x78, OledInitCodes, sizeof(OledInitCodes), 10);是OLED初始化,初始化的代码存在了OledInitCodes这个数组里,0x80代表发送的是指令。
OLED_Clear(void);是清屏
OLED_Print(char *c, uint8_t line);是显示任意ascii字符,这个程序写的是按行显示的,第一个参数是字符指针,可以直接用双引号那种字符串,也可以把要显示的字符先用sprintf写进变量再调用,这两种用法我这个程序都用到了。line是要显示字符的行,一般是从0到6,每行显示16个字符,每行字符占用OLED的两行PAGE
评分
查看全部评分
感谢指点,我研究下这个办法,谢谢