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

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

组件驱动的主程序为:
  1. int main(void)
  2. {
  3. uint8_t i;
  4. float x = 0;
  5. UART_Print_Init(9600);
  6. Delay_init();
  7. while (1)
  8. {
  9. //进度球
  10. updateCanvas(WATERLEVER, 0, (char *)&x, sizeof(float));
  11. Delay_ms(500);
  12. //电池
  13. updateCanvas(BATTERY, 0, (char *)&x, sizeof(float));
  14. Delay_ms(100);
  15. //数码管
  16. updateCanvas(LCDNUMBER, 0, (char *)&x, sizeof(float));
  17. Delay_ms(1000);
  18. x++;
  19. }
  20. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

515

主题

2929

帖子

39

粉丝
快速回复 返回顶部 返回列表