AT32F407的串行通讯功能是很强的,共有8个串行通讯口,其中有4个USART和4个UART。 要对AT32F407的串行通讯功能进行初评,其内容比较多,这里不妨为大家提供一个相对新颖些的,就是用AT32F407的通讯功能同MicroLab的组件驱动结合起来使用,以轻松地构建一个分布式应用系统。 该测试是在MicroLab的组件画布上制作一个有进度球、电池和数码管的界面,见图1所示。 然后以AT32F407的程序通讯功能向其发送控制数据以驱动组件的状态变化,其效果如图2所示。 图1 界面制作 图2 运行效果 此外,在MicroLab一侧还可以借助其串口监测功能来查看接收的数据信息,见图3所示。 图3接收数据的监测 实现数据封装与传输的函数如下: - void updateCanvas(COMPONENT_TYPE componenttype, unsigned short componentnumber, char * data, unsigned short datalen)
- {
- static char tbuffer[TBUFFERSIZE];
- static short size;
- unsigned short i;
- packProtocol(ORGANIZATION, SECTION, DATAPOINT, componenttype, componentnumber, NONE_MSG, data, datalen, tbuffer, &size);
- for(i=0;i<size;i++)
- {
- USART_SendData(USART1,tbuffer[i]);
- while(USART_GetFlagStatus(USART1, USART_FLAG_TDE) == RESET);
- }
- }
组件驱动的主程序为: - int main(void)
- {
- uint8_t i;
- float x = 0;
- UART_Print_Init(9600);
- Delay_init();
- while (1)
- {
- //进度球
- updateCanvas(WATERLEVER, 0, (char *)&x, sizeof(float));
- Delay_ms(500);
- //电池
- updateCanvas(BATTERY, 0, (char *)&x, sizeof(float));
- Delay_ms(100);
- //数码管
- updateCanvas(LCDNUMBER, 0, (char *)&x, sizeof(float));
- Delay_ms(1000);
- x++;
- }
- }
|