本帖最后由 南来之风 于 2023-12-21 20:25 编辑  
 
按照计划,本次准备驱动OLED屏幕。 
 
 
WBZ451主版上的mikroBUS接头的Pinout细节如下: 
 
 
 
 
手头的扩展板上适配树莓派PICO的,可以用于本次测试软件SPI驱动oled,扩展板原理图如下: 
 
 
根据硬件连接图,在MCC中配置相应的引脚输出为GPIO模式: 
 
 
定义好相关的API用于操作OLED: 
- #define OLED_SCL_Clr() SCL_GPIO_RA7_Clear()//CLK
 
 - #define OLED_SCL_Set() SCL_GPIO_RA7_Set()
 
  
- #define OLED_SDA_Clr() SDA_GPIO_RA10_Clear()//DIN
 
 - #define OLED_SDA_Set() SDA_GPIO_RA10_Set()
 
  
- #define OLED_RES_Clr()  RES_GPIO_RA8_Clear() //RES
 
 - #define OLED_RES_Set()  RES_GPIO_RA8_Set()
 
 -                       
 
 - #define OLED_DC_Clr()    DC_GPIO_RA9_Clear()        //дÃüÁî 0
 
 - #define OLED_DC_Set()    DC_GPIO_RA9_Set()        //дÊý¾Ý 1
 
  
- #define OLED_CS_Clr()
 
 - #define OLED_CS_Set()
 
  
- #define OLED_CMD  0        //???ü??
 
 - #define OLED_DATA 1        //??????
 
  
由于WBZ451使用了RTOS,对于刷新OLED的任务,也要创建相应的Task:-     xTaskCreate((TaskFunction_t) _OLED_Display,
 
 -                 "OLED_Tasks",
 
 -                 1024,
 
 -                 NULL,
 
 -                 1,
 
 -                 &xOLED_Display);  
 
  
- void _OLED_Display(  void *pvParameters  ){
 
  
-     OLED_Init();   
 
 -     OLED_Clear();
 
  
-     vTaskDelay(1000/portTICK_PERIOD_MS);
 
 -     
 
 -     OLED_Clear();
 
 -     OLED_ShowChar(10,40,'P',16,1);
 
 -     OLED_ShowChar(20,40,'I',16,1);
 
 -     OLED_ShowChar(30,40,'C',16,1);
 
 -     OLED_ShowString(10,20,"WBZ451",16,1);
 
 -     
 
 -     OLED_Refresh(); 
 
 -     vTaskDelay(5000/portTICK_PERIOD_MS);
 
 -     while(1){
 
 -         GPIO_RB7_Toggle();
 
 -     }
 
 - }
 
 
  
经过反复的排线,软件检查,OLED始终无法显示!!绝望之际,决定检查杜邦线。。。果不其然,劣质产品用不了多久就默默失效了,唉! 
更换了新的线缆,显示效果如下: 
 
 
 
 
 
 
  |