記得剛接觸單片機的時候使用的是STC89C52單片和keil 開發環境,記得當時寫程序都是把程序要實現的功能全部放到一個main.c的函數中去,剛開始完成的功能還是比較簡單。后來學習了STM32F407 知道了還有固件庫這么個可以加快開發速度的東西。將不同的功能的代碼放在了不同的文件中去(gpio.c、IIC.c等)進行歸類。這種方法便于程序的管理維護和擴展其他的功能,現在的單片機以不再是十幾年前的51匯編時代,現在動輒上M的flash存儲空間,除非一些對時序要求特別高,或者是操作系統內核調度中會用到匯編,基本上單片機開發使用的是C語言。模塊化、分層的思想對開發和維護以及后期的功能擴展都是很有幫助。
ASF,Atmel Software Frame 其實ASF也只是一個代號而已,可以理解為他是Atmel 公司開發的兼容Atmel公司單片機的一個固件庫。其中包括了一些驅動、I/O的控制、協議等一些底層驅動,供給用戶來調用加快開發速度。
打開的昨天的示例程序,會看到如圖3-1 所示的文件結構
main.c中主要存放的是示例程序的主程序。ASF的文件夾中主要包括了一系列的板級支持包,比如I/O口的配置、spi等配置文件還有開發板上的OLED屏幕以及SD卡的驅動函數。在thirdparty文件夾中有CMSIS和fatfs。
CMSIS(Cortex Microcontroller Software Interface Standard)是ARM Cortex? 微控制器軟件接口標準,是 Cortex-M 處理器系列的與供應商無關的硬件抽象層,是內核與外設、實時操作系統和中間設備之間的通用接口。
FatFs是一個通用的文件系統模塊,用于在小型嵌入式系統中實現FAT文件系統。 FatFs 的編寫遵循ANSI C,因此不依賴于硬件平臺。
詳細的內容大家可以自己去研究一下。
下面就簡單的分析一下main.c函數。
static void ProcessButtonEvt(uint8_t uc_button);//按鍵處理函數
static void Button1_Handler(uint32_t id, uint32_t mask);//按鍵1 按鍵中斷
static void Button2_Handler(uint32_t id, uint32_t mask); //按鍵2按鍵中斷
static void Button3_Handler(uint32_t id, uint32_t mask); //按鍵3按鍵中斷
static void SD_Detect_Handler(uint32_t id, uint32_t mask); //SD中斷
static void configure_buttons(void);//機械按鍵初始化
static void configure_adc(void);//配置ADC 采集光線傳感器
static void get_num_files_on_sd(void);//得到SD卡根目錄下的文件總數
static void display_sd_info(void);//在OLED上顯示SD卡的狀態
static void display_sd_files(void);//顯示SD卡的內容到OLED屏幕上
static void ssd1306_draw_graph(uint8_t col, uint8_t page, uint8_t width, uint8_t height, uint8_t *tab);//在OLED屏幕上顯示圖片
static void ssd1306_clear_char(void);//清空OLED屏幕
int main(void)
{
/*主要完成時鐘、gpio、OLED、SD卡的初始化,和各個功能*/
}
具體內容參看程序,研究一下ASF提供的函數,開發起來會增加開發速度。
下面我們就來開發個小的實例,讓OLED液晶屏幕輸出HelloWorld!
首先將main.c函數的內容全部清空,我們一步一步來建立這個函數。
因為要在OLED屏上輸出,所以要查看液晶屏的驅動函數。
詳細的可以去項目文件中 ASF -》 common -》 components -》 display -》 ssd1306 中查看驅動文件。
#include
#include
intmain(void)
{
sysclk_init();// 初始化時鐘
board_init();// 初始化GPIO
ssd1306_init();//初始化OLED液晶屏
ssd1306_clear();//清空OLED屏幕
/*顯示helloWorld*/
ssd1306_set_page_address(0);//行
ssd1306_set_column_address(0);//列
ssd1306_write_text(“HelloWorld”);
/*顯示我的論壇ID*/
ssd1306_set_page_address(3);
ssd1306_set_column_address(70);
ssd1306_write_text(“-- liunian__92”);
while(1);
}
上述代碼即可完成輸出HelloWorld。如圖3-2所示
總結一下atmel Studio開發起來還是很好用的,外殼也是VS2010的。有些功能還是很方便的,
比如系統中有
ssd1306_set_page_address();
ssd1306_set_column_address();
_write_text“); 這三個函數,
當你只輸入 ssd 的時候,就會在下面自動出現這個三個備選函數。這個自動補充功能還是蠻實用的。
atmel Studio 一些調試功能還是蠻好用的,更重要的是Help 幫助窗口,有對atmel公司所有芯片和開發板的介紹信息,如果是初次接觸atmel公司芯片的芯片,確實應該好好看看help文檔和他們的示例代碼。但是,可能這個開發環境是為了兼容atmel公司所有的產品,所以會有很多的功能我們用不到,所以感覺整個開發環境就顯得操作緩慢。
-
sam4s
+關注
關注
0文章
2瀏覽量
1564
發布評論請先 登錄
相關推薦
評論