打印
[活动专区]

【AT-START-F407测评】+UART串行通讯(MicroLab组件驱动)

[复制链接]
413|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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++;
}
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝