电子说
记得刚接触单片机的时候使用的是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公司所有的产品,所以会有很多的功能我们用不到,所以感觉整个开发环境就显得操作缓慢。
全部0条评论
快来发表一下你的评论吧 !