SAM4S Xplained pro的示例代码分析详解

电子说

1.3w人已加入

描述

记得刚接触单片机的时候使用的是STC89C52单片和keil 开发环境,记得当时写程序都是把程序要实现的功能全部放到一个main.c的函数中去,刚开始完成的功能还是比较简单。后来学习了STM32F407 知道了还有固件库这么个可以加快开发速度的东西。将不同的功能的代码放在了不同的文件中去(gpio.c、IIC.c等)进行归类。这种方法便于程序的管理维护和扩展其他的功能,现在的单片机以不再是十几年前的51汇编时代,现在动辄上M的flash存储空间,除非一些对时序要求特别高,或者是操作系统内核调度中会用到汇编,基本上单片机开发使用的是C语言。模块化、分层的思想对开发和维护以及后期的功能扩展都是很有帮助。

ASF,Atmel Software Frame 其实ASF也只是一个代号而已,可以理解为他是Atmel 公司开发的兼容Atmel公司单片机的一个固件库。其中包括了一些驱动、I/O的控制、协议等一些底层驱动,供给用户来调用加快开发速度。

打开的昨天的示例程序,会看到如图3-1 所示的文件结构

sam4s

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公司所有的产品,所以会有很多的功能我们用不到,所以感觉整个开发环境就显得操作缓慢。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分