串口及串口实验(可直接用蓝牙透传)(3.14)

本文详细介绍了STM32串口的常用函数如HAL_UART_Transmit和HAL_UART_Receive,以及在中断模式下的操作,包括串口中断回调函数、状态标记和串口接收中断流程。还涉及如何用串口控制LED灯以及一个小bug的说明。
摘要由CSDN通过智能技术生成

常用函数:

串口发送/接收函数:

HAL_UART_Transmit(); 串口发送数据,使用超时管理机制

HAL_UART_Receive(); 串口接收数据,使用超时管理机制

HAL_UART_Transmit_IT(); 串口中断模式发送  

HAL_UART_Receive_IT(); 串口中断模式接收

串口中断回调函数:

HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数

HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //发送中断回调函数

HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //接收中断回调函数

状态标记变量:自己定义

串口接收中断流程:

串口实验(非中断):

其中ch定义为:unsigned char ch[20]={0}

串口接收字符长度为19,因为最后一个字符为‘\0’,strlen(ch)的长度也为19,串口发送完一个数据后要清空ch,防止重复发送。

当然,我们可以重写fputc函数来代替HAL_UART_Transmit();要包含头文件#include "string.h"
#include "stdio.h",

并且使用MicroLIB库要从魔术棒打开,这个勾勾一定要打上,否则 printf 无法重映射!

串口实验(中断):

在非中断串口实验基础上,设置cubeMX的uart1为打开串口中断

并且重写中断回调函数:串口中断是每发送或者接收一个字节数据就会触发中断。

// 接收完成回调函数,收到一个数据后,在这里处理
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    // 判断中断是由哪个串口触发的
    if(huart->Instance == USART1)
    {
        // 判断接收是否完成(UART1_RX_STA bit15 位是否为1)
        if((UART1_RX_STA & 0x8000) == 0)
        {
            // 如果已经收到了 0x0d (回车),
            if(UART1_RX_STA & 0x4000)
            {
                // 则接着判断是否收到 0x0a (换行)
                if(buf == 0x0a)
                    // 如果 0x0a 和 0x0d 都收到,则将 bit15 位置为1
                    UART1_RX_STA |= 0x8000;
                else
                    // 否则认为接收错误,重新开始
                    UART1_RX_STA = 0;
            }
            else    // 如果没有收到了 0x0d (回车)
            {
                //则先判断收到的这个字符是否是 0x0d (回车)
                if(buf == 0x0d)
                {
                    // 是的话则将 bit14 位置为1
                    UART1_RX_STA |= 0x4000;
                }
                else
                {
                    // 否则将接收到的数据保存在缓存数组里
                    UART1_RX_Buffer[UART1_RX_STA & 0X3FFF] = buf;
                    UART1_RX_STA++;
                    
                    // 如果接收数据大于UART1_REC_LEN(200字节),则重新开始接收
                    if(UART1_RX_STA > UART1_REC_LEN - 1)
                        UART1_RX_STA = 0;
                }
            }
        }
        // 重新开启中断
        HAL_UART_Receive_IT(&huart1, &buf, 1);
    }
}
 

在串口初始化后开启接收中断,利用buf接收一个字节,再利用void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数把所有数据存入UART1_RX_Buffer[]中。

串口控制LED灯:

在接受完数据后清空ch:memset(ch,'\0',strlen((const char *)ch));   //清空ch,不然会一直发送

2.代码基于串口实验(中断),有个小bug,UART1_RX_Buffer[]接收数据以UART1_RX_STA第15和16位为标志,15位为换行标志位,并且只有15位为1时,第16位才能为1,所以上位机发送数据时必须“发送新行”。

  • 47
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于CH579实现蓝牙串口透传是指使用CH579芯片作为透传设备,通过蓝牙无线技术实现串口数据的传输。CH579是一种集成了蓝牙协议栈的高性能单芯片解决方案,具有低功耗、高集成度和强大的处理能力。 要实现蓝牙串口透传,首先需要将CH579芯片与蓝牙模块进行连接。可以通过串口通信将蓝牙模块与CH579芯片进行连接,确保二者之间能够互相通信。 接下来,需要在CH579开发环境中编写相应的代码来实现串口透传功能。首先,需要配置串口相关的参数,如波特率、数据位、停止位和校验位等。然后,通过蓝牙模块与外部设备建立蓝牙连接,并进行数据的传输和接收。 在数据传输过程中,CH579芯片将串口数据通过蓝牙模块发送至远端设备,远端设备接收到数据后进行相应的处理。同样地,远端设备也可以通过蓝牙模块将数据发送给CH579芯片,CH579芯片再通过串口将数据传递给外部设备。 通过以上步骤,就可以实现基于CH579的蓝牙串口透传功能。利用该功能,可以方便地在无线环境下进行串口数据的传输和远程控制,提高了数据传输的便捷性和灵活性。同时,CH579芯片的低功耗特性也保证了设备的稳定性和持久性。 ### 回答2: CH579是一款集成了蓝牙串口通信功能的芯片。实现蓝牙串口透传可以通过以下步骤: 1. 硬件连接:将CH579芯片连接到目标设备的串口接口上,并将蓝牙天线连接到芯片的蓝牙天线接口上。 2. 软件配置:使用相关的开发工具或SDK,配置CH579芯片的蓝牙串口通信参数。包括蓝牙的工作频率、传输速率,以及串口的波特率、数据位、停止位等。 3. 初始化蓝牙模块:在程序中使用指令或函数初始化蓝牙模块,包括对蓝牙模块的命令设置、特性开启和状态检测等。 4. 处理数据传输:通过串口接收和发送数据,将接收到的数据透传蓝牙模块,并将蓝牙模块发送的数据透传串口。这可以通过在程序中编写数据处理函数来实现。 5. 建立蓝牙通信连接:启动蓝牙模块的可被发现和配对模式,使其可以与其他蓝牙设备进行通信连接。可以通过在程序中使用对应的指令或函数来实现。 6. 数据透传:一旦蓝牙通信连接建立,就可以通过蓝牙发送和接收数据,实现蓝牙串口透传。 总之,基于CH579实现蓝牙串口透传,需要通过配置芯片参数、初始化蓝牙模块、处理数据传输和建立蓝牙通信连接等步骤。通过这些操作,可以实现将串口数据透传蓝牙模块,并将蓝牙模块发送的数据透传串口。这样,就能够实现蓝牙串口之间的双向数据传输。 ### 回答3: 基于ch579实现蓝牙串口透传是指利用CH579芯片来实现将串口数据通过蓝牙无线传输的功能。CH579是一个集成了蓝牙通信功能的单片机,可以通过编程控制实现串口蓝牙之间的数据传输。 实现步骤如下: 1. 首先,需要连接串口和CH579芯片。将串口的发送和接收线分别连接到CH579的相应引脚上,以实现和串口的数据交互。 2. CH579芯片上有蓝牙模块,需要先进行蓝牙模块的初始化和配置。通过编程控制,设置蓝牙名称、蓝牙工作模式、蓝牙串口参数等。 3. 在程序中设置好串口的波特率、数据位、停止位等参数,以确保和外部设备(如电脑、微控制器等)的串口通信的准确性。 4. 编写程序代码,实现串口蓝牙之间的数据透传功能。即实现串口接收到的数据通过蓝牙发送出去,同时从蓝牙接收到的数据通过串口发送出去。 5. 运行程序,打开串口终端工具,进行串口通信测试。同时,可以使用蓝牙终端工具,连接CH579芯片上的蓝牙模块,测试蓝牙数据的收发功能。 这样,基于CH579芯片实现的蓝牙串口透传功能就完成了。通过这个功能,可以实现无线传输串口数据,方便用户远距离控制和监控设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值