TA的每日心情 | 无聊 2016-8-6 23:33 |
---|
签到天数: 61 天 连续签到: 1 天 [LV.6]常住居民II
|
选择uart是因为L21上没有显示屏幕啊,想想那L22还是有优势的嘛。例程中有一个uart quick start,感觉L21上的例程都比较简单明了,非常有指导价值。
首先是初始化,
//! [setup_change_config]
config_usart.baudrate = 9600;
config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;
config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;
config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;
config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;
config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;
//! [setup_change_config]
从代码中很清晰的看到波特率是9600,然后从EDBG口输出。
然后是初始化和使能
//! [setup_set_config]
while (usart_init(&usart_instance,
EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {
}
usart_enable(&usart_instance);
主函数就更加简单,用到了两个函数
usart_write_buffer_wait();
usart_read_wait();
因为先打开的是poll方式的,所以函数中都带有wait,也就是说等到处理完毕了,才退出函数执行。主要功能就是收到什么,再回显一下。
file:///E:/Mywiz/temp/35f44d91-6da7-49cb-bbb4-f84d859f068b.png
然后我们和上次的结合一下,利用uart来控制板上的灯。收到0表示灭,收到1表示开。这时首先要把LED对应的管脚配置成输出。
port_get_config_defaults(&pin);
pin.direction = PORT_PIN_DIR_OUTPUT;
port_pin_set_config(LED0_PIN, &pin);
然后设置成开灯
port_pin_set_output_level(LED0_PIN,LED_0_ACTIVE);
在收到串口指令后做判断:
if (temp=='0') {
port_pin_set_output_level(LED_0_PIN,LED_0_INACTIVE);
usart_write_buffer_wait(&usart_instance, ledoff, sizeof(ledoff));
}
if (temp=='1') {
port_pin_set_output_level(LED_0_PIN,LED_0_ACTIVE);
usart_write_buffer_wait(&usart_instance, ledon, sizeof(ledon));
}
下面看效果:
file:///E:/Mywiz/temp/1ab78157-3bed-41be-86f4-9c05af4ea319.png
这里有个很奇怪的地方,接收的temp是2个byte的uint16_t,而实际发送的只是char啊?而且改成uint8就收不到字符了,着实奇怪。
|
|