0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32数字电压电流表软件教程-实验六:串口蓝牙发送

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2024-05-31 15:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

7.1.串口基础知识

7.1.1.串口介绍

串行接口简称串口,也称串行通信接口或串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

7.1.2.串口通信参数介绍

  • 波特率:衡量通信速度的参数,它表示每秒钟传送的bit的个数。
  • 数据位:衡量通信中实际数据位的参数,表示一个信息包里包含的数据位的个数。
  • 停止位:用于表示单个信息包的最后位,典型值为1、1.5和2位。由于数据是在传输线上传输的,每个设备都有自己的时钟,很有可能在通信过程中出现不同步,停止位不仅仅表示传输的结束,还能提供校正时钟同步的机会。停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率也越慢。
  • 奇偶检验位:表示一种简单的检查错误的方式。

关于更为详细的介绍请搜索百度。

7.1.3.串口工作模式

串口可以工作在单工、半双工和全双工模式下。

  • 单工:在通信的任意时刻,信息只能由A传到B。
  • 半双工:在通信的任意时刻,信息即可由A传到B,又能由B传到A,但同时只能有一个方向上的传输存在。
  • 全双工:在通信的任意时刻,通信线路上存在A到B和B到A的双向信号传输。

7.1.4.串口通信协议

串口在进行通信的时候会按照数据包的形式进行发送,帧格式如图1-4-1所示。

图9-1 串口通信协议

串口通信是一位一位地传输,每传输一个字节总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平),后面由8位数据位组成,如果开启了校验位,则最后一位数据位是校验位,最后是停止位。停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。

7.2.串口蓝牙接线原理图

在数字电压电流表上默认使用的串口是串口2,接口为CW_UART2_TX和CW_UART2_RX。关于串口和蓝牙连接原理图如图9-2所示。

图 9-2 串口蓝牙接线

使用蓝牙模块KT6368将信息发送出去,只需要调用CW32的UART_2将信息传输至蓝牙模块即可。

7.3.串口驱动流程

串口驱动有以下几个流程:配置CW32时钟树,配置UART_2串口,调用串口打印信息。通过查看上文的CW32时钟树可知,串口2挂载在高级外设时钟 PCLK上,而此前的时钟配置已将PCLK配置成了6MHz。具体的配置函数如下:

void Uart2_Init(void)
{        
    //外设时钟使能
    RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOA, ENABLE);      //使能串口要用到的GPIO时钟
    RCC_APBPeriphClk_Enable1(RCC_APB1_PERIPH_UART2, ENABLE);    //使能串口时钟
    
    GPIO_InitTypeDef GPIO_InitStructure;                        //GPIO初始化
    GPIO_InitStructure.IT = GPIO_IT_NONE;
    GPIO_InitStructure.Pins =  GPIO_PIN_7;
    GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP;
    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
    GPIO_Init(CW_GPIOA, &GPIO_InitStructure);
    PA07_AFx_UART2RXD();
        
    GPIO_InitStructure.IT = GPIO_IT_NONE;
    GPIO_InitStructure.Pins = GPIO_PIN_6;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
    GPIO_Init(CW_GPIOA, &GPIO_InitStructure);
    PA06_AFx_UART2TXD();
  
    USART_InitTypeDef USART_InitStructure;                       //串口初始化
    USART_InitStructure.USART_BaudRate = 115200;                 //设置波特率
    USART_InitStructure.USART_Over = USART_Over_16;              //串口采样方式
    USART_InitStructure.USART_Source = USART_Source_PCLK;        //串口传输时钟源采用PCLK
    USART_InitStructure.USART_UclkFreq = RCC_Sysctrl_GetPClkFreq();  //频率为PCLK的频率
    USART_InitStructure.USART_StartBit = USART_StartBit_FE;      //数据开始位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;       //数据停止位
    USART_InitStructure.USART_Parity = USART_Parity_No ;         //无校验
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  //发送/接收使能
    USART_Init(CW_UART2, &USART_InitStructure);
}

在完成串口的配置后,还需要写一个串口发送函数

void USART_SendString(UART_TypeDef *USARTx, char *String)
{
    while (*String != '�')     //�表示没有数据
    {
        USART_SendData_8bit(USARTx, *String);   //发送一位8bit数据
        while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);  //发送缓冲器未空则等待
        String++;              //发送一次完成后,准备发送下一位数据
    }
    while (USART_GetFlagStatus(USARTx, USART_FLAG_TXBUSY) == SET);     //发送串口状态忙则等待  
}

由于定时器中断为1ms,而串口发送占用的时间较长,所以我们1000ms使用蓝牙发送一次信息,这里的写法并未使用定时器。

char data_reg[24];    //定义数组,用于数据打印
uint32_t Ble_Time=0;  //1000ms计时变量
while(1)              //main函数里的while循环
    {
      if(GetTick() >= (Ble_Time + 1000))     //如果此时的时间大于上一次的1000ms
        {
          Ble_Time = GetTick();              //记录此刻时间
          Volt_Cal();                        //电压计算
          sprintf(data_reg,"volt=%urn",Cal_Buffer);  //打印数据
          USART_SendString(CW_UART2,data_reg);         //调用串口上传数据给蓝牙
        }
    }

注意 GetTick() 函数定义在头文件 cw32f003_systick.h 中,而此函数要使用到系统时钟中断,所以还需要配置系统时钟中断:

InitTick(48000000);                // SYSTICK 的工作频率为48MHz,每ms中断一次

最终可以收到蓝牙传递的数据:

图9-3 蓝牙发送数据

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 蓝牙
    +关注

    关注

    119

    文章

    6221

    浏览量

    177542
  • 串口
    +关注

    关注

    15

    文章

    1607

    浏览量

    81936
  • 电流表
    +关注

    关注

    2

    文章

    239

    浏览量

    27324
  • 数字电压
    +关注

    关注

    0

    文章

    9

    浏览量

    9969
  • CW32
    +关注

    关注

    1

    文章

    281

    浏览量

    1677
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用CW32 MCU来实现UART串口通信与GPIO控制

    最近在项目中使用CW32 MCU,完成了一个简单的UART串口通信和GPIO控制的功能。CW32 MCU的资源相对丰富,特别适合一些低成本、低功耗的嵌入式应用。这里分享一下UART通信与GPIO
    发表于 12-04 08:17

    CW32 MCU在高频率运行下的系统稳定性的提升方案

    问题,并提出一系列应对措施,包括硬件设计改进和软件优化策略,以确保系统在高频工作环境中的可靠性和持续稳定运行。 具体内容包括: 高频运行对MCU的影响分析: 探讨CW32 MCU在高频率运行时,对电源
    发表于 12-04 08:04

    CW32单片机在智能马桶的应用

    1.温度感应与控制 智能马桶内设有温度传感器,通过CW32单片机的处理,可以实时感知到用户所需的座圈温度并根据用户的设定进行调节。当温度过高或过低时,单片机将发出信号,通过控制模块对座圈的加热或制冷
    发表于 12-04 08:01

    基于芯源CW32 MCU的LED闪烁示例及代码分析

    最近我在项目中使用了芯源的CW32 MCU,这是一款非常适合物联网和低功耗应用的微控制器。在初步学习和使用中,我做了一个简单的LED闪烁实验,通过这篇帖子给大家分享一下代码及相关的配置步骤。 硬件
    发表于 12-04 06:52

    CW32 MCU温度监测应用

    监测环境温度,并通过串口将数据发送到PC端进行显示。 硬件连接 CW32 MCU LM35温度传感器 USB转串口模块 代码实现 #include \"
    发表于 12-03 08:03

    基于芯源半导体MCU cw32芯片制作的USB电压电流表

    1、项目功能介绍 基于芯源半导体MCU cw32芯片制作 USB电压电流表 基于芯源半导体MCU cw32芯片+INA199芯片制作 USB电压电流表,精度1%。可以检测
    发表于 12-02 06:39

    cw32 systick怎么用?

    cw32 systick怎么用
    发表于 12-01 08:10

    CW32嵌入式软件开发的必备知识

    嵌入式软件开发作为计算机科学和电子工程的交叉领域,要求开发人员具备一系列的专业知识和技能。 而基于CW32的嵌入式软件开发必备知识包括以下部分: 1 、编程语言 熟练掌握C(C++)语言,这是
    发表于 11-28 07:48

    使用J-Flash来编程CW32 MCU

    1.安装J-Flash: 从SEGGER官方网站下载最新版本的J-Flash工具。 按照安装向导的指示完成安装过程。 2.连接硬件: 将CW32 MCU通过调试器(如J-LINK)连接到你的计算机
    发表于 11-25 07:00

    【活动评测】基于CW32的wegui实验+代码

    简介 最近参加了cw32生态社区的体验活动,CW32L012C8T6评估板是一款非常典型的、用于展示和评估国产低功耗MCU的开发板。它的核心价值在于让开发者能够以极低的成本,接触到武汉芯源半导体
    的头像 发表于 11-19 16:37 470次阅读
    【活动评测】基于<b class='flag-5'>CW32</b>的wegui<b class='flag-5'>实验</b>+代码

    CW32 MCU用什么IDE开发?

    推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM则需要安装CW
    发表于 11-12 07:52

    CW32 MCU有哪些系列?

    目前CW32 MCU有通用高性能MCU、安全低功耗MCU、无线射频MCU等3个系列。其中射频MCU集成了无线收发器,主要包括CW32R031(2.4GHz BLE-Lite)系列和CW32W031(Sub-1G)系列。
    发表于 11-12 07:34

    CW32 MCU的工作电压、工作温度是多少?

    CW32通用型MCU工作电压是1.65V~5.5V,射频MCU工作电压则是1.8V/2.2V~3.6V;通用型CW32F系列MCU,比如:CW
    发表于 11-12 06:49

    CW32 MCU用什么仿真器开发?

    理论上各主流IDE枚举的、支持ARM Cortex内核的所有硬件仿真器,比如:J-LINK,ULINK,DAP,ST-Link等,都可以仿真、下载CW32 MCU的应用代码。如果想实现量产或者离线下载应用代码,则必须配套支持CW32 MCU的PC端
    发表于 11-12 06:01

    CW32】uart_obj_fw 轻量级串口框架

    以下文章内容由CW32生态社区用户提供: https://gitee.com/teletubbies-die-of-murder/lightweight-serial-framework 介绍
    的头像 发表于 09-29 18:02 7430次阅读