TA的每日心情 | 开心 2017-7-4 13:51 |
---|
签到天数: 347 天 连续签到: 1 天 [LV.8]以坛为家I
|
原本是打算研究Arduino的,结果参考网上众多网友心得才发现自己AtmelStudio还是没会用呀。以前使用都是直接导入例程,在原有的基础上改,然后就常常被已有的体系所困扰,如果自己单独建立,最后一定会报错,所以一直比较纠结。参考很多坛友的,实际建立工程发现确实AtmelStudio用起来更为灵活了,一点不比MDK、IAR之类的IDE差。O(∩_∩)O~
在此将正确步骤列出,也给自己留个记录:
首先选择第2个,选择工程文件,第一个也是可以的
选择对应芯片型号
然后会自动建立好工程。在此基础上就可以正常开发了,类似于用MDK或IAR.
如果想用ASF那请接着往下看
选择ASF Wizard,如图其实也有快捷键的,但我试了很多次都没反应,所以还是老老实实用鼠标吧
这里其实是个提醒,我当时误以为得把板子插笔记本上的usb线得拔出,后来才反应过来不是的
得选择第一个,这里我是点了好多次才跳到第一个,一直没反应,有点小郁闷还以为不好改呢
这边就是ASF的模块选择了,这比直接打开看asf的库要好太多了,没那么眼花缭乱,完全找不到或找不全。列的很清晰的。选择要的模块添加。
像此处,我想实现led闪烁功能,那么就选择一个GPIO的还有delay延时的,add添加
添加完成Apply
点击OK,导入工程
导入后又会有一个main.c,在新产生的src文件夹下,所以删除原来的main
现在来看看主函数很简单的,就一个板子初始化的
其实是空函数,那需要设定什么吗?暂时不添加,我们看看效果
简单写下主函数
#include <asf.h>#define LED IOPORT_CREATE_PIN(PORTB, 5)int main (void){ // Insert system clock initialization code here (sysclk_init()). board_init(); delay_init(); ioport_init(); ioport_set_pin_dir(LED, IOPORT_DIR_OUTPUT); // Insert application code here, after the board has been initialized. while(1) { ioport_toggle_pin_level(LED); delay_ms(5000); }}编译下试试
不错不错,没错也没警告。
修改设置
编译烧入,看看板子效果如何。
led闪烁正常,由此可见board_init其实是可以没有的如果不需要用到的话
整个程序构架还是比较清晰的,可以说可以让你很清晰的的知道怎么用。
附带一提的是delay_ms这函数真强悍,我之前一直再想用多少合适,等看到定义彻底无语
#define delay_ms(delay) cpu_delay_ms(delay, F_CPU)#define cpu_delay_ms(delay, f_cpu) delay_cycles(cpu_ms_2_cy(delay, f_cpu))#define cpu_delay_us(delay, f_cpu) delay_cycles(cpu_us_2_cy(delay, f_cpu))#if !defined(__DELAY_CYCLE_INTRINSICS__)# define delay_cycles __portable_avr_delay_cycles# define cpu_ms_2_cy(ms, f_cpu) (((uint64_t)(ms) * (f_cpu) + 999) / 6e3)# define cpu_us_2_cy(us, f_cpu) (((uint64_t)(us) * (f_cpu) + 999999ul) / 6e6)#else# if defined(__GNUC__)# define delay_cycles __builtin_avr_delay_cycles# elif defined(__ICCAVR__)# define delay_cycles __delay_cycles# endif# define cpu_ms_2_cy(ms, f_cpu) (((uint64_t)(ms) * (f_cpu) + 999) / 1e3)# define cpu_us_2_cy(us, f_cpu) (((uint64_t)(us) * (f_cpu) + 999999ul) / 1e6)#endif居然是64位的,这值究竟得有多大呀,真的很强悍呀。O(∩_∩)O~ |
|