昨天,Mbed升级到了version 111,终于支持SAMR21G18A, SAMD21J18A, SAMD21G18A了。于是尝试了一下用Mbed编写SAM R21的程序。
在Mbed编译器中,SAM R21的模板依然是空的,没有任何参考例程。但是我们可以自己导入Mbed库,方法见前天的帖子《
STM32F469 Discovery 评测之MBed闪灯》。
然后,在main.cpp中添加测试代码。
- #include "mbed.h"
-
- //DigitalOut LED_1(LED1);
- PwmOut LED_1(LED1);
-
- Ticker tmr;
-
- AnalogIn ain(PA06);
-
- Serial pc(USBTX, USBRX);
-
- void tmr_isr()
- {
- //LED_1 = !LED_1;
- if(LED_1 < 0.9)
- LED_1 = LED_1 + 0.1;
- else
- LED_1 = 0;
- }
-
- uint16_t cnt = 0;
- int main()
- {
-
- tmr.attach(&tmr_isr, 0.1);
-
- LED_1.period(0.001f);
-
- pc.printf("\nSAM R21 Mbed test.\r\n");
-
- while(1) {
- pc.printf("%d ain=%d\n", cnt++, ain.read_u16());
- wait(1.0);
- }
- }
这段代码的主要功能是:
- 通过PWM占空比,改变LED亮度
- 在定时器中改变PWM
- ADC采样PA06端口
- 通过串口输出ADC结果
这样就把几个常用功能都测试了。
运行结果如下:
可以看到ADC的采样仍然不稳定,ADC波动很大,和以前使用AS6.2时的效果一样,不知道是不是还需要对ADC进行特别设置。
上面的程序是在Mbed编译器中编译的,因为SAM R21不支持U盘方式下载,所以使用了AS7的device programming下载程序到SAM R21开发板。Mbed编译器的程序可以导出为Keil的项目格式,但是不能导出为AS7的格式。导出为Keil格式后,并不能正常编译,编译后提示有3个错误:
.\build\SAMR21_blink.axf: Error: L6218E: Undefined symbol __initial_sp (referred from entry2.o).
.\build\SAMR21_blink.axf: Error: L6218E: Undefined symbol __heap_base (referred from malloc.o).
.\build\SAMR21_blink.axf: Error: L6218E: Undefined symbol __heap_limit (referred from malloc.o).
暂时没有找到原因,所以keil的程序文件就不上传了。
本帖最后由 dcexpert 于 2015-12-17 00:43 编辑