882|9

504

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

【NUCLEO H533RE】基于读写接口实现标准输入输出 [复制链接]

完整工程代码见附件:

Tx_Thread_Creation.zip (164.98 KB, 下载次数: 2)

替换\STM32Cube_FW_H5_V1.2.0\Projects\NUCLEO-H533RE\Applications\ThreadX\Tx_Thread_Creation

 

一.前言

前面我们实现了好用的串口读写接口,现在在此基础上我们来移植一个轻量级的标准输入输出函数库,详见微信公众号”嵌入式Lee”的文章:https://mp.weixin.qq.com/s/y4MHV3cd4T0b51L5M4J5Xg,极海半导体APM32F107VC开发板-移植超轻量级标准输入输出函数库xprintf

 

 

二.准备

按照公众号文章说明下载xprintf.c/h添加到工程中。

 

将xprintf.h中所有宏配置为1

 

 

三.接口配置

Uart_task.h

#include "xprintf.h"

 

#include "xprintf.h"

static void xprintf_out(int ch)
{
	uint8_t tmp = ch;
	uart_write(&tmp,1);
}

static int xprintf_in(void)
{
	uint8_t tmp;
	uint32_t len;
	do
  {
		len = uart_read(&tmp,1);
		if(len == 0)
    {
		   tx_thread_sleep(1); /* avoid block low pr thread*/
		}
	}while(len == 0);
	return tmp;
}

static void uart_task_entry(ULONG thread_input)
{
	uart_init();
	xdev_out(xprintf_out);
	xdev_in(xprintf_in);
	xprintf("start uart task\r\n");
	while(1)
	{
		  uint32_t len;
	    /* tx */
		  do
      {
				__disable_interrupts();
				len = fifo_out(&tx_fifo_dev,tx_fifo_buffer,sizeof(tx_fifo_buffer));
				__enable_interrupts();	
				if(len > 0)
				{
					for(uint32_t i=0 ;i<len; i++)
					{
						LL_USART_TransmitData8(USART2,tx_fifo_buffer[i]);
						while(LL_USART_IsActiveFlag_TC(USART2) == 0);
					}
				}
			}while(len >0 );
			tx_thread_sleep(1);
	}
	
}

 

四.测试

Main_task.c中

#include "xprintf.h"

static void main_task_entry(ULONG thread_input)
{
	tx_thread_sleep(100);  /* wait uart and xprintf init done */
	xprintf("start main task\r\n");
	while(1)
	{
		#if 0
			uint32_t len = uart_read(rx_buffer,sizeof(rx_buffer));
		  if(len > 0)
      { 
					uart_write(rx_buffer,len);
			}
			//uart_write(tx_buffer,sizeof(tx_buffer));
			tx_thread_sleep(1);
		#else 
    xprintf("%d\n", 1234);             /* "1234" */
    xprintf("%6d,%3d%%\n", -200, 5);   /* "  -200,  5%" */
    xprintf("%-6u\n", 100);            /* "100   " */
    xprintf("%ld\n", 12345678);        /* "12345678" */
    xprintf("%llu\n", 0x100000000);    /* "4294967296"   <XF_USE_LLI> */
    xprintf("%lld\n", -1LL);           /* "-1"           <XF_USE_LLI> */
    xprintf("%04x\n", 0xA3);           /* "00a3" */
    xprintf("%08lX\n", 0x123ABC);      /* "00123ABC" */
    xprintf("%016b\n", 0x550F);        /* "0101010100001111" */
    xprintf("%*d\n", 6, 100);          /* "   100" */
    xprintf("%s\n", "abcdefg");        /* "abcdefg" */
    xprintf("%5s\n", "abc");           /* "  abc" */
    xprintf("%-5s\n", "abc");          /* "abc  " */
    xprintf("%.5s\n", "abcdefg");      /* "abcde" */
    xprintf("%-5.2s\n", "abcdefg");    /* "ab   " */
    xprintf("%c\n", 'a');              /* "a" */
    xprintf("%12f\n", 10.0);           /* "   10.000000" <XF_USE_FP> */
    xprintf("%.4E\n", 123.45678);      /* "1.2346E+02"   <XF_USE_FP> */
		
		while(1)
    {
			char input_buffer[32];
			char* str = input_buffer;
			xprintf("please input two int\r\n");
			xgets(input_buffer, sizeof(input_buffer));
			long a;
			xatoi(&str,&a);
			long b;
			xatoi(&str,&b);
			xprintf("%d+%d=%d\r\n",a,b,a+b);
		}
		#endif
	}
}

 

测试如下,输入输出OK

 

 

五.总结

以上实现了标准输入输出交互后面就方便进行开发调试了。

此帖出自stm32/stm8论坛

最新回复

是的,这种问题很难搞。只能使用注意一下   详情 回复 发表于 2024-7-22 12:28
点赞 关注
 

回复
举报

7042

帖子

11

TA的资源

版主

沙发
 

以上实现了标准输入输出交互后面就方便进行开发调试了。

这是跑在RTHTEADx操作系统下面的吧。

此帖出自stm32/stm8论坛

点评

是的  详情 回复 发表于 2024-7-8 11:54
 
 

回复

504

帖子

4

TA的资源

纯净的硅(高级)

板凳
 
lugl4313820 发表于 2024-7-8 07:03 以上实现了标准输入输出交互后面就方便进行开发调试了。 这是跑在RTHTEADx操作系统下面的吧。

是的

此帖出自stm32/stm8论坛
 
 

回复

290

帖子

0

TA的资源

一粒金砂(高级)

4
 

大佬,我的H533识别不到ST-LINK,求指教一下。

5V跳线帽是设置在VBUS_STLINK上的

此帖出自stm32/stm8论坛

点评

5V跳线放在5V_STLINK上试一下  详情 回复 发表于 2024-7-10 16:25
 
个人签名

阅读改变人生

 
 

回复

504

帖子

4

TA的资源

纯净的硅(高级)

5
 
怀揣少年梦 发表于 2024-7-10 16:04 大佬,我的H533识别不到ST-LINK,求指教一下。 5V跳线帽是设置在VBUS_STLINK上的

5V跳线放在5V_STLINK上试一下

此帖出自stm32/stm8论坛

点评

默认就是5V_ST-LINK;但是还是识别不了。而且这个时候,MCU的BLINK的灯也不亮。大佬,你的板子是上电就会识别到ST-LINK吗?  详情 回复 发表于 2024-7-10 16:37
 
 
 

回复

290

帖子

0

TA的资源

一粒金砂(高级)

6
 
qinyunti 发表于 2024-7-10 16:25 5V跳线放在5V_STLINK上试一下

默认就是5V_ST-LINK;但是还是识别不了。而且这个时候,MCU的BLINK的灯也不亮。大佬,你的板子是上电就会识别到ST-LINK吗?

此帖出自stm32/stm8论坛

点评

默认就是对的  详情 回复 发表于 2024-7-10 17:55
 
个人签名

阅读改变人生

 
 

回复

504

帖子

4

TA的资源

纯净的硅(高级)

7
 
怀揣少年梦 发表于 2024-7-10 16:37 默认就是5V_ST-LINK;但是还是识别不了。而且这个时候,MCU的BLINK的灯也不亮。大佬,你的板子是上电就会 ...

默认就是对的

此帖出自stm32/stm8论坛

点评

好的,可能是USB集线器的问题,现在好了  详情 回复 发表于 2024-7-10 23:28
 
 
 

回复

290

帖子

0

TA的资源

一粒金砂(高级)

8
 

好的,可能是USB集线器的问题,现在好了

此帖出自stm32/stm8论坛

点评

我也遇到过,typec线太差了    详情 回复 发表于 2024-7-22 11:44
 
个人签名

阅读改变人生

 
 

回复

48

帖子

1

TA的资源

一粒金砂(中级)

9
 
怀揣少年梦 发表于 2024-7-10 23:28 好的,可能是USB集线器的问题,现在好了

我也遇到过,typec线太差了

 

此帖出自stm32/stm8论坛

点评

是的,这种问题很难搞。只能使用注意一下  详情 回复 发表于 2024-7-22 12:28
 
 
 

回复

290

帖子

0

TA的资源

一粒金砂(高级)

10
 
空耳- 发表于 2024-7-22 11:44 我也遇到过,typec线太差了  

是的,这种问题很难搞。只能使用注意一下

此帖出自stm32/stm8论坛
 
个人签名

阅读改变人生

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表