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

    文章

    1807

    浏览量

    64418
  • 串行通信接口

    关注

    0

    文章

    17

    浏览量

    9548
  • 定时器中断
    +关注

    关注

    0

    文章

    49

    浏览量

    11157

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

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

收藏 人收藏

    评论

    相关推荐

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

    电压跟随器的功能简化外围电路 2、使用了和市面电压电流表的同款接口(XH2.54+CH3.96),方便通用 3、最大40V的表头供电电压,覆盖大部分常用电压范围 4、板载低成本
    的头像 发表于 04-25 15:20 1821次阅读
    <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 1667次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(一):LED原理与驱动基础知识详解

    CW32数字电压电流表软件教程(三):数码管显示数字

    数码管的显示原理是由多个发光的二极管共阴极或者共阳极组成的成“8”字形的显示器件。数码管通过不同的组合可用来显示数字0~9、字符A ~ F及小数点“.”。
    的头像 发表于 05-14 14:20 2.1w次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(三):数码管显示<b class='flag-5'>数字</b>

    用JLCPCB制造数字电压表/电流表

    用JLCPCB制造数字电压表/电流表教程。
    发表于 04-11 14:45 0次下载

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

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

    基于STM32的USB电压电流表

    电子发烧友网站提供《基于STM32的USB电压电流表.zip》资料免费下载
    发表于 08-10 14:47 40次下载
    基于STM32的USB<b class='flag-5'>电压电流表</b>

    精密DIY电压电流表

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

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

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

    CW32数字电压电流表软件教程-实验五:ADC采样及显示

    数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 6.1.2.
    的头像 发表于 05-31 15:28 493次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>-实验五:ADC采样及显示

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

    7.1.串口基础知识 7.1.1.串口介绍 串行接口简称串口,也称串行通信接口或串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数
    的头像 发表于 05-31 15:45 284次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>-实验<b class='flag-5'>六</b>:<b class='flag-5'>串口</b><b class='flag-5'>蓝牙</b><b class='flag-5'>发送</b>

    CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)

    有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=∑f(x,y)/m,m为该模板中包含当前像素在内的像素总个数。这本是数字图像处理的一种方法,但也可以用在我们数字电压电流表
    的头像 发表于 05-31 15:47 325次阅读

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

    基于[CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)],可以对电压电流进行同时采集显示。
    的头像 发表于 05-31 15:50 588次阅读
    <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>同时显示

    CW32数字电压电流表软件进阶教程-2.电压电流值做均值滤波

    在实验运行7.1章节例程时 [CW32数字电压电流表软件进阶教程-1.电压电流同时显示] ,会发现实时显示更新的数据是当前采集值,并未做数据
    的头像 发表于 05-31 15:57 429次阅读

    CW32数字电压电流表软件进阶教程-3.电压电流标定

    标定是通过测量标准器的偏差来补偿仪器系统误差,从而改善仪器或系统准确度、精度的操作。为了提高电压电流表在测量时的测量精度和准确度,需要对电压电流进行标定校准。 常见的标定原理如下:假设一个采样系统
    的头像 发表于 05-31 16:20 614次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件</b>进阶教程-3.<b class='flag-5'>电压电流</b>标定

    基于CW32F003E4P7的数字电压电流表产品方案

    产品实物: 一、产品概述 数字电压电流表,又称为数显电流电压表,是以数字形式显示,能够同时检测电流电压
    的头像 发表于 06-25 11:55 827次阅读
    基于<b class='flag-5'>CW</b>32F003E4P7的<b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b>产品方案