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

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

3天内不再提示

CW32数字电压电流表软件教程(六):串口蓝牙发送

武汉芯源半导体 来源:CW32生态社区 2024-05-21 10:36 次阅读

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所示。

e3a991f0-1710-11ef-b74b-92fbcf53809c.png

图9-1 串口通信协议

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

7.2.串口蓝牙接线原理图

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

e3d0155a-1710-11ef-b74b-92fbcf53809c.png

图 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=%u
",Cal_Buffer);  //打印数据
          USART_SendString(CW_UART2,data_reg);         //调用串口上传数据给蓝牙
        }
    }

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

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

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

e3f5dede-1710-11ef-b74b-92fbcf53809c.png

图9-3 蓝牙发送数据



审核编辑:刘清

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

    关注

    9

    文章

    1593

    浏览量

    63839
  • 串行通信接口

    关注

    0

    文章

    15

    浏览量

    9535
  • 定时器中断
    +关注

    关注

    0

    文章

    49

    浏览量

    11079

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

文章出处:【微信号:武汉芯源半导体,微信公众号:武汉芯源半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CW32数字电压电流表-产品硬件设计要点

    主要功能: 1、对5-99V的电压与0.1-3A的电流进行测量与显示 2、通过蓝牙发送测得的数据 3、作为一款CW32+数码管的迷你开发板
    的头像 发表于 04-25 15:20 1377次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b>-产品硬件设计要点

    CW32数字电压电流表软件教程(一):LED原理与驱动基础知识详解

    LED 驱动指的是通过稳定的电源为 LED 提供合适的电流电压,使其正常工作点亮。LED 驱动方式主要有恒流和恒压两种。
    的头像 发表于 05-06 15:33 1136次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(一):LED原理与驱动基础知识详解

    CW32饭盒派开发板试用体验】串口实验

    CW32饭盒派开发板实现串口接收并控制LED
    的头像 发表于 05-29 09:13 41.9w次阅读
    【<b class='flag-5'>CW32</b>饭盒派开发板试用体验】<b class='flag-5'>串口</b>实验

    电流表电压表的选择和使用

    。使用电流表时要将电流表串联接人被测电路。在测量较高电压电路的电流时,电流表应串联接在被测电路中的低电位端,如图1(a)所示。如果错接成并联
    发表于 02-08 09:23

    求个最简单的labview电压表电流表,能实时显示电压电流就行

    求个最简单的labview电压表电流表,能测出电压电流和显示就行我在做一个系统设计,里面需要用到电压电流的监测,求各位大佬帮帮忙,给个例
    发表于 03-16 09:52

    数字电流表的设计

    1 应用背景1.1设计意义数字电流表的诞生打破了传统电子测量仪器的模式和格局。它显示清晰直观、读数准确,采用了先进的数显技术,大大地减少了因人为因素所造成的测量误差事件。数字电流表把电
    发表于 08-06 06:22

    INA219电压电流表的资料分享

    描述电压电流表INA219这真的是一个很酷的小设备,它不仅可以让你测量电流,还可以测量电压。通过一点乘法,您甚至可以测量功率。在电压方面,您可以直接超过 Arduino 5 伏的限制。
    发表于 08-18 07:16

    CW32计数智化助力,现身青岛环球计大会

    4月25-28日,2023年中国国际计行业年度大会顺利举办。在这次展会中,武汉芯源半导体携CW32家族产品,为计行业参观者展示了燃气、水表、电表、可燃气体报警器等
    发表于 05-05 14:24

    求:推荐微型宽温数字电压电流表

    各位大神: 因项目需求,需采购宽温微型数字电压电流表头。工作温度范围是:-40°~60°,最低也要在-25°~50°。 不知群里的大神有推荐么?
    发表于 08-27 15:22

    CW Programmer CW32系列芯片烧录工具配套软件

    CW Programmer CW32系列芯片的烧录工具配套软件
    发表于 09-15 07:44

    智能电压电流表的工作原理及功能

    电压电流表,主要用于测量直流电压电流信号、传感器输出的电压电流信号等等。近年来,随着智能电子技术的发展,
    的头像 发表于 05-06 09:38 2829次阅读

    精密DIY电压电流表

    电子发烧友网站提供《精密DIY电压电流表.zip》资料免费下载
    发表于 10-27 14:19 20次下载
    精密DIY<b class='flag-5'>电压电流表</b>

    基于CW32的物联网应用

    CW32】基于CW32的物联网应用
    的头像 发表于 11-02 15:55 415次阅读
    基于<b class='flag-5'>CW32</b>的物联网应用

    CW32数字电压电流表软件教程-实验四:数码管动态显示

    5.1.数码管动态显示原理 所谓动态扫描显示即轮流向各位数码管送出段码和位码,利用发光管的余辉和人眼视觉暂留作用,使人眼的感觉好像各位数码管同时都在显示。明确了原理,我们要使电压电流表的三个位同时
    的头像 发表于 05-31 15:23 115次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>-实验四:数码管动态显示

    CW32数字电压电流表软件进阶教程-1.电压电流同时显示

    基于[CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)],可以对电压电流进行同时采集显示。
    的头像 发表于 05-31 15:50 151次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件</b>进阶教程-1.<b class='flag-5'>电压电流</b>同时显示