RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CW32數(shù)字電壓電流表軟件教程(六):串口藍(lán)牙發(fā)送

jf_qE49KoVBr8 ? 來源:CW32生態(tài)社區(qū) ? 2024-05-21 10:36 ? 次閱讀

7.1.串口基礎(chǔ)知識(shí)

7.1.1.串口介紹

串行接口簡稱串口,也稱串行通信接口或串行通信接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。串行接口 (Serial Interface)是指數(shù)據(jù)一位一位地順序傳送。其特點(diǎn)是通信線路簡單,只要一對傳輸線就可以實(shí)現(xiàn)雙向通信(可以直接利用電話線作為傳輸線),從而大大降低了成本,特別適用于遠(yuǎn)距離通信,但傳送速度較慢。

7.1.2.串口通信參數(shù)介紹

波特率:衡量通信速度的參數(shù),它表示每秒鐘傳送的bit的個(gè)數(shù)。

數(shù)據(jù)位:衡量通信中實(shí)際數(shù)據(jù)位的參數(shù),表示一個(gè)信息包里包含的數(shù)據(jù)位的個(gè)數(shù)。

停止位:用于表示單個(gè)信息包的最后位,典型值為1、1.5和2位。由于數(shù)據(jù)是在傳輸線上傳輸?shù)模總€(gè)設(shè)備都有自己的時(shí)鐘,很有可能在通信過程中出現(xiàn)不同步,停止位不僅僅表示傳輸?shù)慕Y(jié)束,還能提供校正時(shí)鐘同步的機(jī)會(huì)。停止位的位數(shù)越多,不同時(shí)鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率也越慢。

奇偶檢驗(yàn)位:表示一種簡單的檢查錯(cuò)誤的方式。

關(guān)于更為詳細(xì)的介紹請搜索百度。

7.1.3.串口工作模式

串口可以工作在單工、半雙工和全雙工模式下。

單工:在通信的任意時(shí)刻,信息只能由A傳到B。

半雙工:在通信的任意時(shí)刻,信息即可由A傳到B,又能由B傳到A,但同時(shí)只能有一個(gè)方向上的傳輸存在。

全雙工:在通信的任意時(shí)刻,通信線路上存在A到B和B到A的雙向信號傳輸。

7.1.4.串口通信協(xié)議

串口在進(jìn)行通信的時(shí)候會(huì)按照數(shù)據(jù)包的形式進(jìn)行發(fā)送,幀格式如圖1-4-1所示。

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

圖9-1 串口通信協(xié)議

串口通信是一位一位地傳輸,每傳輸一個(gè)字節(jié)總是以起始位開始,以停止位結(jié)束,字符之間沒有固定的時(shí)間間隔要求。每一個(gè)字符的前面都有一位起始位(低電平),后面由8位數(shù)據(jù)位組成,如果開啟了校驗(yàn)位,則最后一位數(shù)據(jù)位是校驗(yàn)位,最后是停止位。停止位后面是不定長的空閑位,停止位和空閑位都規(guī)定為高電平。

7.2.串口藍(lán)牙接線原理圖

在數(shù)字電壓電流表上默認(rèn)使用的串口是串口2,接口為CW_UART2_TX和CW_UART2_RX。關(guān)于串口和藍(lán)牙連接原理圖如圖9-2所示。

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

圖 9-2 串口藍(lán)牙接線

使用藍(lán)牙模塊KT6368將信息發(fā)送出去,只需要調(diào)用CW32的UART_2將信息傳輸至藍(lán)牙模塊即可。

7.3.串口驅(qū)動(dòng)流程

串口驅(qū)動(dòng)有以下幾個(gè)流程:配置CW32時(shí)鐘樹,配置UART_2串口,調(diào)用串口打印信息。通過查看上文的CW32時(shí)鐘樹可知,串口2掛載在高級外設(shè)時(shí)鐘 PCLK上,而此前的時(shí)鐘配置已將PCLK配置成了6MHz。具體的配置函數(shù)如下:

void Uart2_Init(void)
{        
    //外設(shè)時(shí)鐘使能
    RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOA, ENABLE);      //使能串口要用到的GPIO時(shí)鐘
    RCC_APBPeriphClk_Enable1(RCC_APB1_PERIPH_UART2, ENABLE);    //使能串口時(shí)鐘
    
    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;                 //設(shè)置波特率
    USART_InitStructure.USART_Over = USART_Over_16;              //串口采樣方式
    USART_InitStructure.USART_Source = USART_Source_PCLK;        //串口傳輸時(shí)鐘源采用PCLK
    USART_InitStructure.USART_UclkFreq = RCC_Sysctrl_GetPClkFreq();  //頻率為PCLK的頻率
    USART_InitStructure.USART_StartBit = USART_StartBit_FE;      //數(shù)據(jù)開始位
    USART_InitStructure.USART_StopBits = USART_StopBits_1;       //數(shù)據(jù)停止位
    USART_InitStructure.USART_Parity = USART_Parity_No ;         //無校驗(yàn)
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件流控
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  //發(fā)送/接收使能
    USART_Init(CW_UART2, &USART_InitStructure);
}

在完成串口的配置后,還需要寫一個(gè)串口發(fā)送函數(shù)

void USART_SendString(UART_TypeDef *USARTx, char *String)
{
    while (*String != '?')     //?表示沒有數(shù)據(jù)
    {
        USART_SendData_8bit(USARTx, *String);   //發(fā)送一位8bit數(shù)據(jù)
        while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);  //發(fā)送緩沖器未空則等待
        String++;              //發(fā)送一次完成后,準(zhǔn)備發(fā)送下一位數(shù)據(jù)
    }
    while (USART_GetFlagStatus(USARTx, USART_FLAG_TXBUSY) == SET);     //發(fā)送串口狀態(tài)忙則等待  
}

由于定時(shí)器中斷為1ms,而串口發(fā)送占用的時(shí)間較長,所以我們1000ms使用藍(lán)牙發(fā)送一次信息,這里的寫法并未使用定時(shí)器。

char data_reg[24];    //定義數(shù)組,用于數(shù)據(jù)打印
uint32_t Ble_Time=0;  //1000ms計(jì)時(shí)變量
while(1)              //main函數(shù)里的while循環(huán)
    {
      if(GetTick() >= (Ble_Time + 1000))     //如果此時(shí)的時(shí)間大于上一次的1000ms
        {
          Ble_Time = GetTick();              //記錄此刻時(shí)間
          Volt_Cal();                        //電壓計(jì)算
          sprintf(data_reg,"volt=%u
",Cal_Buffer);  //打印數(shù)據(jù)
          USART_SendString(CW_UART2,data_reg);         //調(diào)用串口上傳數(shù)據(jù)給藍(lán)牙
        }
    }

注意 GetTick() 函數(shù)定義在頭文件 cw32f003_systick.h 中,而此函數(shù)要使用到系統(tǒng)時(shí)鐘中斷,所以還需要配置系統(tǒng)時(shí)鐘中斷:

InitTick(48000000);                // SYSTICK 的工作頻率為48MHz,每ms中斷一次

最終可以收到藍(lán)牙傳遞的數(shù)據(jù):

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

圖9-3 藍(lán)牙發(fā)送數(shù)據(jù)



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)六:串口藍(lán)牙發(fā)送

文章出處:【微信號:武漢芯源半導(dǎo)體,微信公眾號:武漢芯源半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    CW32數(shù)字電壓電流表-產(chǎn)品硬件設(shè)計(jì)要點(diǎn)

    電壓跟隨器的功能簡化外圍電路 2、使用了和市面電壓電流表的同款接口(XH2.54+CH3.96),方便通用 3、最大40V的表頭供電電壓,覆蓋大部分常用電壓范圍 4、板載低成本
    的頭像 發(fā)表于 04-25 15:20 ?1899次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b>-產(chǎn)品硬件設(shè)計(jì)要點(diǎn)

    CW32數(shù)字電壓電流表軟件教程(一):LED原理與驅(qū)動(dòng)基礎(chǔ)知識(shí)詳解

    LED 驅(qū)動(dòng)指的是通過穩(wěn)定的電源為 LED 提供合適的電流電壓,使其正常工作點(diǎn)亮。LED 驅(qū)動(dòng)方式主要有恒流和恒壓兩種。
    的頭像 發(fā)表于 05-06 15:33 ?1738次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>(一):LED原理與驅(qū)動(dòng)基礎(chǔ)知識(shí)詳解

    CW32數(shù)字電壓電流表軟件教程(三):數(shù)碼管顯示數(shù)字

    數(shù)碼管的顯示原理是由多個(gè)發(fā)光的二極管共陰極或者共陽極組成的成“8”字形的顯示器件。數(shù)碼管通過不同的組合可用來顯示數(shù)字0~9、字符A ~ F及小數(shù)點(diǎn)“.”。
    的頭像 發(fā)表于 05-14 14:20 ?2.5w次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>(三):數(shù)碼管顯示<b class='flag-5'>數(shù)字</b>

    用JLCPCB制造數(shù)字電壓表/電流表

    用JLCPCB制造數(shù)字電壓表/電流表教程。
    發(fā)表于 04-11 14:45 ?0次下載

    智能電壓電流表的工作原理及功能

    電壓電流表,主要用于測量直流電壓、電流信號、傳感器輸出的電壓電流信號等等。近年來,隨著智能電子技術(shù)的發(fā)展,
    的頭像 發(fā)表于 05-06 09:38 ?3295次閱讀

    基于STM32的USB電壓電流表

    電子發(fā)燒友網(wǎng)站提供《基于STM32的USB電壓電流表.zip》資料免費(fèi)下載
    發(fā)表于 08-10 14:47 ?40次下載
    基于STM32的USB<b class='flag-5'>電壓電流表</b>

    精密DIY電壓電流表

    電子發(fā)燒友網(wǎng)站提供《精密DIY電壓電流表.zip》資料免費(fèi)下載
    發(fā)表于 10-27 14:19 ?21次下載
    精密DIY<b class='flag-5'>電壓電流表</b>

    CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)四:數(shù)碼管動(dòng)態(tài)顯示

    5.1.數(shù)碼管動(dòng)態(tài)顯示原理 所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出段碼和位碼,利用發(fā)光管的余輝和人眼視覺暫留作用,使人眼的感覺好像各位數(shù)碼管同時(shí)都在顯示。明確了原理,我們要使電壓電流表的三個(gè)位同時(shí)
    的頭像 發(fā)表于 05-31 15:23 ?501次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-實(shí)驗(yàn)四:數(shù)碼管動(dòng)態(tài)顯示

    CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)五:ADC采樣及顯示

    數(shù)字信號。由于數(shù)字信號本身不具有實(shí)際意義,僅僅表示一個(gè)相對大小。故任何一個(gè)模數(shù)轉(zhuǎn)換器都需要一個(gè)參考模擬量作為轉(zhuǎn)換的標(biāo)準(zhǔn),比較常見的參考標(biāo)準(zhǔn)為最大的可轉(zhuǎn)換信號大小。而輸出的數(shù)字量則表示輸入信號相對于參考信號的大小。 6.1.2.
    的頭像 發(fā)表于 05-31 15:28 ?546次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-實(shí)驗(yàn)五:ADC采樣及顯示

    CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)串口藍(lán)牙發(fā)送

    7.1.串口基礎(chǔ)知識(shí) 7.1.1.串口介紹 串行接口簡稱串口,也稱串行通信接口或串行通信接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。串行接口 (Serial Interface)是指數(shù)
    的頭像 發(fā)表于 05-31 15:45 ?328次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件教程</b>-實(shí)驗(yàn)<b class='flag-5'>六</b>:<b class='flag-5'>串口</b><b class='flag-5'>藍(lán)牙</b><b class='flag-5'>發(fā)送</b>

    CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)七:基本數(shù)據(jù)處理算法(均值濾波)

    有像素的均值,再把該均值賦予當(dāng)前像素點(diǎn)(x,y),作為處理后圖像在該點(diǎn)上的灰度g(x,y),即g(x,y)=∑f(x,y)/m,m為該模板中包含當(dāng)前像素在內(nèi)的像素總個(gè)數(shù)。這本是數(shù)字圖像處理的一種方法,但也可以用在我們數(shù)字電壓電流表
    的頭像 發(fā)表于 05-31 15:47 ?360次閱讀

    CW32數(shù)字電壓電流表軟件進(jìn)階教程-1.電壓電流同時(shí)顯示

    基于[CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)七:基本數(shù)據(jù)處理算法(均值濾波)],可以對電壓電流進(jìn)行同時(shí)采集顯示。
    的頭像 發(fā)表于 05-31 15:50 ?713次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件</b>進(jìn)階教程-1.<b class='flag-5'>電壓電流</b>同時(shí)顯示

    CW32數(shù)字電壓電流表軟件進(jìn)階教程-2.電壓電流值做均值濾波

    在實(shí)驗(yàn)運(yùn)行7.1章節(jié)例程時(shí) [CW32數(shù)字電壓電流表軟件進(jìn)階教程-1.電壓電流同時(shí)顯示] ,會(huì)發(fā)現(xiàn)實(shí)時(shí)顯示更新的數(shù)據(jù)是當(dāng)前采集值,并未做數(shù)據(jù)
    的頭像 發(fā)表于 05-31 15:57 ?486次閱讀

    CW32數(shù)字電壓電流表軟件進(jìn)階教程-3.電壓電流標(biāo)定

    標(biāo)定是通過測量標(biāo)準(zhǔn)器的偏差來補(bǔ)償儀器系統(tǒng)誤差,從而改善儀器或系統(tǒng)準(zhǔn)確度、精度的操作。為了提高電壓電流表在測量時(shí)的測量精度和準(zhǔn)確度,需要對電壓電流進(jìn)行標(biāo)定校準(zhǔn)。 常見的標(biāo)定原理如下:假設(shè)一個(gè)采樣系統(tǒng)
    的頭像 發(fā)表于 05-31 16:20 ?704次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b><b class='flag-5'>軟件</b>進(jìn)階教程-3.<b class='flag-5'>電壓電流</b>標(biāo)定

    基于CW32F003E4P7的數(shù)字電壓電流表產(chǎn)品方案

    產(chǎn)品實(shí)物: 一、產(chǎn)品概述 數(shù)字電壓電流表,又稱為數(shù)顯電流電壓表,是以數(shù)字形式顯示,能夠同時(shí)檢測電流電壓
    的頭像 發(fā)表于 06-25 11:55 ?911次閱讀
    基于<b class='flag-5'>CW</b>32F003E4P7的<b class='flag-5'>數(shù)字</b><b class='flag-5'>電壓電流表</b>產(chǎn)品方案
    RM新时代网站-首页