栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

合宙 CSDK串口调试记录 Cat.1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

合宙 CSDK串口调试记录 Cat.1

1 前言

在这之前,串口收发配置只在单片机、VS环境C#上位机有实现过,本次项目需要,头一次使用CSDK调试开发。按照套路,本来以为很简单,一下子就可以实现了,但是现实却打了我的脸,折腾了几个小时。在调试完成之余,对自己学习过程过一个记录。

2 串口配置 2.1 初始化串口
BOOL Usart_cfg_init(E_AMOPENAT_UART_PORT port, E_AMOPENAT_UART_BAUD baud)
{
    T_AMOPENAT_UART_PARAM uartCfg = {0x0};
    unsigned char ret;
    memset(&uartCfg, 0, sizeof(T_AMOPENAT_UART_PARAM));
    uartCfg.baud = baud;  
    uartCfg.dataBits = 8;    
    uartCfg.stopBits = 1;  
    uartCfg.parity = OPENAT_UART_NO_PARITY;  
    uartCfg.flowControl = OPENAT_UART_FLOWCONTROL_NONE;  
    uartCfg.txDoneReport = TRUE; 
    uartCfg.uartMsgHande = NULL;      //如果需要串口中断接收数据,需要实现回调函数
    ret = iot_uart_open(port, &uartCfg);
    return ret;
}
2.2 串口发送接口
UINT32 iot_uart_write(                                        
                        E_AMOPENAT_UART_PORT port,           
                        UINT8* buf,                         
                        UINT32 bufLen                     
                    )
{
    return OPENAT_write_uart(port, buf, bufLen);
}
2.3 自定义实现 printf
#include                         //uart redirect fputc
#include                         //copy function
#include                         //va_start /vsnprintf /va_end function

void sy_Debug_Printf(E_AMOPENAT_UART_PORT port, char *format, ...) //自定义实现printf
{
	unsigned char uart_buff[256];

	unsigned char *pStr = uart_buff;	
	unsigned char delay_max;
	unsigned char  tem;
	va_list ap;
	
	va_start(ap, format);	                					//初始化 ap 变量
	vsnprintf((char *)pStr, sizeof(uart_buff), format, ap);		//可变参数。用于向字符串中打印数据、数据格式用户自定义
	va_end(ap);													//允许使用了 va_start 宏的带有可变参数的函数返回
	
	while((*pStr) != '')
	{
	// 这部分针对不同 MCU 自己实现单字节发送
     tem = (unsigned char)*pStr;
     iot_uart_write(port, &tem, 1);
	 pStr++;					                                            //address data add
	}	
}
2.4 测试demo
int appimg_enter(void *param)
{
    Usart_cfg_init(DEBG_UART_PORT,115200);   
    sy_test_task_handle = iot_os_create_task(sy_test_task, NULL, 4096, 1, OPENAT_OS_CREATE_DEFAULT, "sy_test");
    return 0;
}
void appimg_exit(void)
{
    iot_debug_print("[sy_test_task_handle]appimg_exit");
}
 
 
static void sy_test_task(PVOID pParameter) //测试任务
{
    char write_buff[] = "uart hello world 8888888888888888888888";
    int32 write_len;
   while(1){
 write_len = iot_uart_write(UART_PORT2, (UINT8*)write_buff, strlen(write_buff));
 iot_os_sleep(100); //这个是必须的
}
}


3特别说明

整个程序配置下来看着很简单是不是?对的,整个流程都跟简单。但是这里有一点需要特别注意,如果串口打开过了,就不能二次打开,否则就会引起串口打开失败而不工作。错误代码例子如下:

BOOL Usart_cfg_init(E_AMOPENAT_UART_PORT port, E_AMOPENAT_UART_BAUD baud)
{
    T_AMOPENAT_UART_PARAM uartCfg = {0x0};
    unsigned char ret;
    memset(&uartCfg, 0, sizeof(T_AMOPENAT_UART_PARAM));
    uartCfg.baud = baud;  
    uartCfg.dataBits = 8;    
    uartCfg.stopBits = 1;  
    uartCfg.parity = OPENAT_UART_NO_PARITY;  
    uartCfg.flowControl = OPENAT_UART_FLOWCONTROL_NONE;  
    uartCfg.txDoneReport = TRUE; 
    uartCfg.uartMsgHande = NULL;      //如果需要串口中断接收数据,需要实现回调函数
    ret = iot_uart_open(port, &uartCfg);
    ret = iot_uart_open(port, &uartCfg);  //多配置了一次
    return ret;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号