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 蓝牙发送数据

审核编辑 黄宇

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

    关注

    114

    文章

    5699

    浏览量

    168471
  • 串口
    +关注

    关注

    14

    文章

    1534

    浏览量

    75642
  • 电流表
    +关注

    关注

    2

    文章

    227

    浏览量

    26123
  • 数字电压
    +关注

    关注

    0

    文章

    9

    浏览量

    9810
  • CW32
    +关注

    关注

    1

    文章

    171

    浏览量

    512
收藏 人收藏

    评论

    相关推荐

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

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

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

    标定是通过测量标准器的偏差来补偿仪器系统误差,从而改善仪器或系统准确度、精度的操作。为了提高电压电流表在测量时的测量精度和准确度,需要对电压电流进行标定校准。 常见的标定原理如下:假设一个采样系统
    的头像 发表于 05-31 16:20 480次阅读
    <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>标定

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

    实验运行7.1章节例程时 [CW32数字电压电流表软件进阶教程-1.电压电流同时显示] ,会发
    的头像 发表于 05-31 15:57 355次阅读

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

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

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

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

    数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 6.1.2.
    的头像 发表于 05-31 15:28 405次阅读
    <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>五:ADC采样及显示

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

    5.1.数码管动态显示原理 所谓动态扫描显示即轮流向各位数码管送出段码和位码,利用发光管的余辉和人眼视觉暂留作用,使人眼的感觉好像各位数码管同时都在显示。明确了原理,我们要使电压电流表的三个位同时
    的头像 发表于 05-31 15:23 380次阅读
    <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>四:数码管动态显示

    CW32数字电压电流表软件教程-实验二:按键检测

    3.1.独立按键基础知识 3.1.1.独立按键结构组成 独立按键实际上是一个非自锁的轻触开关,有左右两个触点,当按下时左右两个触点闭合,当松开时左右两个触点断开。 3.1.2.独立按键控制原理 想要使用外部的按键控制单片机有两种比较常见的方法:IO扫描和外部中断。对于IO扫描的方式而言,需要单片机以比较高的频率去不间断地判断IO口的输入电平,随后根据IO电平来执行后续的逻辑。外部中断的方式会在章节十二中进行详细介绍,本章着重介绍IO扫描的
    的头像 发表于 05-31 15:16 732次阅读
    <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>二:按键检测

    CW32数字电压电流表软件教程-实验一:LED原理与驱动

    2.1.LED灯基础知识 2.1.1.LED灯结构组成 LED灯,也称发光二极管,是一种能够将电能转化为可见光的固态的半导体器件,它可以直接把电转化为光。LED的内部是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,整个晶片环-氧树脂封装起来。常见的LED灯如图2-1所示。 图2-1 常见LED灯 2.1.2.LED灯发光原理 半导体晶片由两部分组成,一部分是P型半导体,另一端是N型半导体。这两种半导体连接起来的时候,它们之间就形成了一个
    的头像 发表于 05-31 15:09 255次阅读
    <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>一:LED原理与驱动

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

    串行接口简称串口,也称串行通信接口或串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。
    的头像 发表于 05-21 10:36 419次阅读
    <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数字电压电流表软件教程(五):ADC采样及显示

    模拟数字转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通
    的头像 发表于 05-21 10:34 942次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(五):ADC采样及显示

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

    数码管的显示原理是由多个发光的二极管共阴极或者共阳极组成的成“8”字形的显示器件。数码管通过不同的组合可用来显示数字0~9、字符A ~ F及小数点“.”。
    的头像 发表于 05-14 14:20 1.5w次阅读
    <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>

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

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

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

    电压跟随器的功能简化外围电路 2、使用了和市面电压电流表的同款接口(XH2.54+CH3.96),方便通用 3、最大40V的表头供电电压,覆盖大部分常用电压范围 4、板载低成本
    的头像 发表于 04-25 15:20 1692次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b>-产品硬件设计要点

    基于单片机的电压电流表设计

    电子发烧友网站提供《基于单片机的电压电流表设计.rar》资料免费下载
    发表于 01-12 09:59 14次下载