W800/W801开发版入门(二)——串口通信UART

UART简介

通用异步收发传输器,即为UART(Universal Asynchronous Receiver/Transmitter),是一种常见的数据通信协议,用于在计算机和外部设备之间传输数据。UART通信是一种异步通信方式,它通过串行数据传输,允许设备之间以逐位的方式交换信息,并且UART是通用的,因为其的传输速度、数据速度和其他的参数是可配置的。

在UART中,字母"A"代表"异步",表示UART通信不依赖于共享的时钟信号来同步数据传输,而是使用特殊的起始位和停止位来标志数据字的开头和结尾,以便发送器和接收器能够协调数据传输。采用这种异步通信方式使UART非常适用于各种设备之间的数据传输,特别是在需要不同速率的设备之间进行通信时。UART通信较为简单和灵活,可以在很多低速或嵌入式应用中使用。

程序实例

跑马灯实现

w801开发板有7个led灯,分别表示为WM_IO_PB_05/25/26/18/17/16/11,实现跑马灯效果的源代码如下。

c 复制代码
#include "wm_include.h"

int led[7]={WM_IO_PB_05,WM_IO_PB_25,WM_IO_PB_26,WM_IO_PB_18,WM_IO_PB_17,WM_IO_PB_16,WM_IO_PB_11};

void UserMain(void)
{
	#if DEMO_CONSOLE
		CreateDemoTask(); 
	#endif
	// w801测试板用WM_IO_PB_05/25/26/18/17/16/11
	// W800测试板:PB00是绿,PB01是红,PB02是蓝

	//初始IO
	for(int i=0;i<7;i++) {
		tls_gpio_cfg(led[i],WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
	}
	
	int i=0;
	while (1){		
		tls_gpio_write(led[i],0); // 0表示灯亮,1表示灯灭
		delay(1000 * 1000);
		tls_gpio_write(led[i],1);
		i++;
		i %= 7;
	}
}

W800开发板有3个灯,组合成RGB灯,可以组合成多种色彩,分别为WM_IO_PB_00,WM_IO_PB_01,WM_IO_PB_02(绿、红、蓝)

c 复制代码
#include "wm_include.h"

int led[3]={WM_IO_PB_00,WM_IO_PB_01,WM_IO_PB_02};

void UserMain(void)
{
  
	#if DEMO_CONSOLE
		CreateDemoTask(); 
	#endif
	// w801测试板用WM_IO_PB_05/25/26/18/17/16/11
	// W800测试板:PB00是绿,PB01是红,PB02是蓝

	//初始IO
	for(int i=0;i<3;i++) {
		tls_gpio_cfg(led[i],WM_GPIO_DIR_OUTPUT,WM_GPIO_ATTR_PULLLOW);
	}
	
	int i=0;
	while (1){		
		tls_gpio_write(led[i],0); // 0表示灯亮,1表示灯灭
		delay(1000 * 1000);
		tls_gpio_write(led[i],1);
		i++;
		i %= 3;
	}
}

UART通信实例

该实例中,开发板通过串口接收到数据,并通过URAT串口0发送接收到的数据。

cpp 复制代码
#include "wm_include.h"
#include <string.h>

//定义一个信号量
tls_os_sem_t * sem_rx = NULL;
// 存储收到数据的长度
u16 rx_length = 0;
char rx_fifo_buf[1024] = {0};

// 接收回调函数
s16 my_uart_rx_callback(u16 len, void* user_data) {
	// 释放被获取的信号量
	tls_os_sem_release(sem_rx);
	// 将接收到字符累加
	rx_length += len;
    return WM_SUCCESS;
}

void UserMain(void){
	printf("\n user task \n");
	#if DEMO_CONSOLE
		CreateDemoTask();
	#endif
	// 选择待使用的引脚及具体的复用功能
	/* UART0_RX-PB20  UART0_TX-PB19 */
	wm_uart1_rx_config(WM_IO_PB_20);
	wm_uart1_tx_config(WM_IO_PB_19);

	//配置uart参数
	tls_uart_options_t opt;
	opt.baudrate = UART_BAUDRATE_B115200; //波特率
	opt.paritytype = TLS_UART_PMODE_DISABLED; //无奇偶校验
	opt.stopbits = TLS_UART_ONE_STOPBITS; //一个停止位
	opt.charlength = TLS_UART_CHSIZE_8BIT; //数据长度
	opt.flow_ctrl = TLS_UART_FLOW_CTRL_NONE; //没有流控制
	
	if (WM_SUCCESS != tls_uart_port_init(TLS_UART_0, &opt, 0))
	{
		printf("uart0 init error\n");
	}
	//为串口绑定接收回调函数
	tls_uart_rx_callback_register((u16) TLS_UART_0, (s16(*)(u16, void*))my_uart_rx_callback, NULL); 
	
	//用于判断信号量是否成功获取
	tls_os_status_t os_status  = TLS_OS_ERROR;
	
	//创建信号量,用于回调函数和线程之间通信
	tls_os_sem_create(&sem_rx, 0);
	
	// 接收数据长度
	u16_t rx_len = 0;
	
	while(1) {
		os_status = tls_os_sem_acquire(sem_rx, 20);
		if(os_status) {
			if(rx_length > 0) {				
				rx_len = tls_uart_read(TLS_UART_0, rx_fifo_buf, rx_length);//串口0接收到的数据
				
				// 去除接收到的字符中的换行符
				for (int i = 0; i < rx_len; i++) {
					if (rx_fifo_buf[i] == '\r' || rx_fifo_buf[i] == '\n') {
						rx_fifo_buf[i] = '\0';
						rx_length = i;
						break;
					}
				}
				
				printf("长度:%d;字符:%s\n",rx_length,rx_fifo_buf);
				rx_length = 0;
				tls_uart_write(TLS_UART_0, rx_fifo_buf, rx_len); //串口0发送数据
			}
		}
	}
}

参考

  1. W801芯片产品规格书_V2.0.pdf
  2. W801_寄存器手册_V3.0.pdf
  3. W801芯片设计指导书V3.1.pdf
相关推荐
TDengine (老段)2 小时前
TDengine 快速体验(云服务方式)
大数据·物联网·时序数据库·数据库架构·iot·tdengine·涛思数据
深圳市尚想信息技术有限公司4 小时前
【深尚想】SX1276IMLTRT LoRa射频收发器芯片 物联网 电子元器件解析
物联网·芯片·电子元器件·射频收发器·收发器芯片
工业通讯探索者5 小时前
数据采集器在轴承温度与振动远程监控中的应用
物联网·数据采集·边缘计算网关·工业智能网关·4g远程网关
TDengine (老段)1 天前
TDengine 开发指南—— UDF函数
java·大数据·数据库·物联网·数据分析·tdengine·涛思数据
学习噢学个屁1 天前
基于STM32物联网智能鱼缸智能家居系统
c语言·stm32·单片机·嵌入式硬件·物联网·智能家居
Stanford_11061 天前
关于大数据的基础知识(二)——国内大数据产业链分布结构
大数据·开发语言·物联网·微信小程序·微信公众平台·twitter·微信开放平台
网易独家音乐人Mike Zhou1 天前
【无人机】MavLink通讯协议的回调解析函数及状态机
单片机·mcu·物联网·嵌入式·无人机·iot
我身高一米七三1 天前
ADC数据采集
物联网
虾球xz1 天前
CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
开发语言·c++·物联网·学习
乄夜2 天前
嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)
c语言·c++·单片机·嵌入式硬件·物联网·面试·职场和发展