查看: 1378|回复: 0

​Atmel SAM4S 学习笔记(三)-- 示例代码分析

[复制链接]
  • TA的每日心情
    慵懒
    2016-10-17 12:07
  • 签到天数: 306 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2014-11-17 15:29:32 | 显示全部楼层 |阅读模式
    分享到:
    上一篇文章中,介绍了环境的搭建和示例程序编译和下载到单片机中。这篇文章主要是介绍一下Atmel SAM4S Xplained pro 开发板的示例程序和ASF。
            记得刚接触单片机的时候使用的是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<asf.h>
    #include<string.h>
    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公司所有的产品,所以会有很多的功能我们用不到,所以感觉整个开发环境就显得操作缓慢。
    这个是官方的给出的一些视屏教程,介绍了atmel Studio开发环境使用的,有兴趣可以去看一看:
    https://www.atmel.com/zh/cn/Microsite/atmel_studio6/videos.aspx
            经过这几天的学习对这款单片机还是有一定的宏观上的了解,准备下篇文章,介绍一下搭建一个简单高效好用的开发环境IAR。来学习这款芯片最底层的东西,通过产看芯片手册配置寄存器来实现中断、定时器等功能。
    希望可以和更多爱好者们多多交流学习。
    如果有什么建议问题欢迎私信或者Email(574433742@qq.com)我哦。。。。
    Atmel SAM4S Xplained pro学习笔记(一)-- 开发套件介绍
    Atmel SAM4S 学习笔记(二)-- 开发环境搭建
    Atmel SAM4S 学习笔记(三)-- 示例代码分析
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-30 19:30 , Processed in 0.110199 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.