[ BLE4.0 ] 伦茨ST17H66开发-串口UART0的接收与发送

目录

一、前言

二、实现步骤

        1.设置回调函数

        2.关闭睡眠模式

三、效果展示

四、工程源代码


一、前言

        串口通信在任何一款单片机开发中都是尤为重要的。本文涉及的开发所使用的例程依然是基于[ BLE4.0 ] 伦茨ST17H66开发-OSAL系统中添加自己的Task任务文章的工程源码,本文实现的任务主要是将接收到的串口数据再打印出去。

        伦茨ST17H66的SDK中为我们提供了AT_LOG()函数和LOG()函数,这两个函数以及帮助我们实现了串口打印的功能,但是对于串口接收,官方的SDK中并没有为我们实现。

二、实现步骤

        1.设置回调函数

        首先在my_printf.c文件中找到dbg_printf_init函数,这是UART0的初始化函数。

        通过程序,我们可以看出串口的波特率设置和TX以及RX的引脚设置,同样的我们可以利用这个初始化函数自行仿照配置UART1,但此处不多赘述。通过最后一个属性 evt_handler = NULL 我们不难看出SDK没有为串口设置中断回调函数,通过查阅手册,我们可以找到标准的示例回调函数。

        因此我们根据其标准示例,仿照完成自己的中断回调函数。这里有点问题,即rx_size的类型被设定为uint8,其最大值为255,这与数组长度1024相差甚远,这将会浪费1024-255个字节控件,因此在之后的函数中,我将其改为了uint16,确保空间利用率。当然也可以选择将数组大小改为255,异曲同工。

        程序的具体实现代码如下:

uint8_t receive_buf[1024];
uint16_t receive_size = 0;
__ATTR_SECTION_SRAM__ void uart_evt_hdl(uart_Evt_t* pev)
{
	switch(pev->type)
	{
		case UART_EVT_TYPE_RX_DATA:
		case UART_EVT_TYPE_RX_DATA_TO://接收回调
			memset(receive_buf,'\0',1024);
			memcpy(receive_buf,pev->data,pev->len);//保存接收信息
			receive_size = pev->len;//保存接收长度
			//打印接收信息
			LOG("%s",receive_buf);
			break;
		case UART_EVT_TYPE_TX_COMPLETED://发送完成回调
			
			break;
	}
}

        与示例不同,示例采用了拼接的方式,而在常规开发中这是不常见的。我们往往系统接收的数组里仅有这次收到的数据,因此我做了修改,只保留了本次接收的数据,没有和之前的数据做拼接,并使用LOG将数据打印出来。

        编译并烧录程序,发现程序对发送的数据没有反应,这是什么原因呢?

        2.关闭睡眠模式

        查阅文档,我们发现串口RX接收数据是不能处于睡眠模式的,这就说明其实芯片根本没有收到我们发送的数据。按照上一篇文章的方法,我们继续在宏定义中取消睡眠模式。

三、效果展示

        编译并烧录进芯片后,使用串口调试助手,进行查看。可以看到,程序顺利返回发送的信息。

四、工程源代码

        将该文件解压后放到下图所示位置即可,全局有效。

        源文件:【免费】ST17H66串口文件.zip资源-CSDN文库

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西菜鸟

打赏支持获得问题解答机会

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值