復旦微電子推出的FM33LG0xx開發(fā)板免費試用活動,小伙伴們積極參與,并基于FM33LG0xx開發(fā)板進行開發(fā),如下是參與者的開發(fā)過程和心得。
FM33LG0xx系列開發(fā)板示意圖
FM33LG0xx開發(fā)板在引腳資源的使用上是很有特點的,它既不是按走線的方便來提供引腳資源,也不是以Arduino接口的方式來提供引腳資源,而是按接口的類型,這就為使用者提供了極大的方便。由于該開發(fā)板在外設的配置上比較簡單,因此有必要為它配上一個顯示屏來觀察輸出信息。這里為它配置的是一款0.96寸的雙色顯示屏,它使用的是板上的I2C接口。
圖 1.顯示效果
圖 2.I2C接口電路原理圖
該接口所使用的引腳為:
SCL---PA11
SDA---PA12
為便于以GPIO口來模擬I2C驅動,相關引腳輸出高低電平的定義為:
#defineSCL_high FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_11)
#defineSCL_low FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_11)
#defineSDA_high FL_GPIO_SetOutputPin(GPIOA, FL_GPIO_PIN_12)
#defineSDA_low FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_12)
以模擬方式發(fā)送字節(jié)數(shù)據(jù)的函數(shù)為:
void Write_IIC_Byte(unsigned char IIC_Byte){ unsigned char i; unsigned char m,da; da=IIC_Byte; SCL_low; for(i=0;i<8;i++) { m=da; m=m&0x80; if(m==0x80) { SDA_high; } else SDA_low; da=da<<1; SCL_high; SCL_low; }}
為實現(xiàn)圖1的顯示效果,其主程序為:
int main(void){ MF_Clock_Init(); MF_SystemClock_Config(); FL_Init(); MF_Config_Init(); UserInit(); key_int(); led_int(); oled_app(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,"FM33LG0XX",16); OLED_ShowCHinese(20,2,0); OLED_ShowCHinese(36,2,1); OLED_ShowCHinese(52,2,2); OLED_ShowCHinese(68,2,3); OLED_ShowCHinese(84,2,4); OLED_ShowCHinese(100,2,5); OLED_ShowString(20,6,"jinglixixi",16); while(1);}
有了OLED屏的顯示功能,后面再遇到顯示問題時就方便許多。在FM33LG0xx開發(fā)板的內部,配有一個低功耗實時時鐘日歷(RTCC),并帶有數(shù)字調校功能,其調校精度為+/-0.476ppm,將它與OLED屏的顯示功能相結合,即可輕松地實現(xiàn)RTC電子時鐘的功能。
圖 3.計時效果
圖 4.RTC后備電源
由于在例程中提供了標準的RTC讀取函數(shù),故稍加修改即可完成RTC的讀取及顯示功能,修改后的讀取函數(shù)為:
uint8_t RTC_GetRTCA(FL_RTCA_InitTypeDef *InitStructer){ uint8_t n, i; uint8_t Result = 1; uint32_t u,ut; FL_RTCA_InitTypeDef TempTime1; FL_RTCA_GetTime(RTCA, &TempTime1); u=((uint32_t *)(&TempTime1))[4]; OLED_ShowNumH(20,5,u,2,16); u=((uint32_t *)(&TempTime1))[5]; OLED_ShowNumH(44,5,u,2,16); u=((uint32_t *)(&TempTime1))[6]; OLED_ShowNumH(68,5,u,2,16); return Result;}
實現(xiàn)RTC計時功能的測試函數(shù)如下,它含有RTC的初始值設置及循環(huán)讀取功能:
uint8_t RTC_GetRTCA(FL_RTCA_InitTypeDef *InitStructer){ uint8_t n, i; uint8_t Result = 1; uint32_t u,ut; FL_RTCA_InitTypeDef TempTime1; FL_RTCA_GetTime(RTCA, &TempTime1); u=((uint32_t *)(&TempTime1))[4]; OLED_ShowNumH(20,5,u,2,16); u=((uint32_t *)(&TempTime1))[5]; OLED_ShowNumH(44,5,u,2,16); u=((uint32_t *)(&TempTime1))[6]; OLED_ShowNumH(68,5,u,2,16); return Result;}
實現(xiàn)圖3計時顯示效果的主程序為:
int main(void){ MF_Clock_Init(); MF_SystemClock_Config(); FL_Init(); MF_Config_Init(); UserInit(); CDIF->CR= 0x02; oled_app(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,"FM33LG0XX",16); OLED_ShowCHinese(20,2,0); OLED_ShowCHinese(36,2,1); OLED_ShowCHinese(52,2,2); OLED_ShowCHinese(68,2,3); OLED_ShowCHinese(84,2,4); OLED_ShowCHinese(100,2,5); OLED_ShowString(20,6,"jinglixixi",16); FL_DelayMs(1000); OLED_ShowString(20,6," ",16); OLED_ShowString(20,5," : : ",16); Test_RTCA(); while(1) { LED0_TOG(); FL_DelayMs(1000); }}
-
OLED
+關注
關注
119文章
6200瀏覽量
224215 -
微電子
+關注
關注
18文章
382瀏覽量
41203 -
開發(fā)板
+關注
關注
25文章
5050瀏覽量
97481
發(fā)布評論請先 登錄
相關推薦
評論