久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> MM32/靈動(dòng)微電子 >> MM32W無(wú)線(xiàn)MCU系列產(chǎn)品應(yīng)用筆記 —— 數(shù)據(jù)采集儀器

MM32W無(wú)線(xiàn)MCU系列產(chǎn)品應(yīng)用筆記 —— 數(shù)據(jù)采集儀器

關(guān)鍵字:靈動(dòng)微電子 MM32W無(wú)線(xiàn)MCU 數(shù)據(jù)采集儀器 作者: 來(lái)源: 發(fā)布時(shí)間:2022-06-14  瀏覽:75
在前面一個(gè)章節(jié)中我們?cè)敿?xì)介紹了基于MM32W系列芯片的串口透?jìng)鲬?yīng)用,該應(yīng)用可以實(shí)現(xiàn)豐富的數(shù)據(jù)透?jìng)鞣桨福诒菊鹿?jié)我們將再給大家介紹一個(gè)簡(jiǎn)易而擴(kuò)展性較強(qiáng)的應(yīng)用方案——基于MM32W系列開(kāi)發(fā)的數(shù)據(jù)采集儀器。
 
方案應(yīng)用圖

 圖1 方案應(yīng)用圖

在工業(yè)控制現(xiàn)場(chǎng),常常需要實(shí)時(shí)采集大量的現(xiàn)場(chǎng)數(shù)據(jù),如電壓、電流、溫度、濕度、氣壓等,往往這些小信號(hào)都是需要輸入到專(zhuān)業(yè)的數(shù)據(jù)采集模塊中進(jìn)行處理,后者又將采集的數(shù)據(jù)傳輸?shù)街鳈C(jī)進(jìn)行處理,由主機(jī)根據(jù)處理的結(jié)果,將控制信號(hào)傳輸給現(xiàn)場(chǎng)執(zhí)行模塊進(jìn)行各種操作。目前數(shù)據(jù)的傳輸基本是基于有線(xiàn)的網(wǎng)絡(luò),如RS485,CAN等。這些有線(xiàn)的網(wǎng)絡(luò)一般具有成本比較高、維護(hù)不方便等缺點(diǎn)。而無(wú)線(xiàn)傳輸相對(duì)具有一定的優(yōu)勢(shì),如成本低、可靠性高、維護(hù)方便等。本文將介紹一個(gè)基于MM32W系列MCU的簡(jiǎn)易藍(lán)牙數(shù)據(jù)采集系統(tǒng)實(shí)現(xiàn)過(guò)程。

硬件資源如下:

本方案基于MM32 BLE_Test Board進(jìn)行測(cè)試驗(yàn)證,為了簡(jiǎn)易模擬實(shí)現(xiàn)傳感器信號(hào)的采集與處理過(guò)程,在硬件原理上,本方案直接使用DEMO板上自帶的ADC電位器RV1來(lái)調(diào)節(jié)不同的輸入信號(hào)情況,該信號(hào)連接到引腳PB0上,該引腳可復(fù)用為AD采樣通道CH8;使用PB1連接到綠色LED指示燈,可作為藍(lán)牙連接狀態(tài)的指示,且低功耗喚醒引腳選擇PA0配置為下拉輸入;藍(lán)牙相關(guān)的功能引腳與前面介紹的方案一致,此處不做過(guò)多展開(kāi)。

硬件原理圖

圖2 硬件原理圖
 
軟件資源如下:

結(jié)合上述使用到的硬件資源,下面我們著重介紹軟件實(shí)現(xiàn)流程以及相關(guān)配置代碼,主要涉及ADC模擬通道以及相應(yīng)引腳的配置,加上ADC采樣的配置及使用。

以下為主函數(shù)初始化配置及相關(guān)全局變量定義內(nèi)容,主要將所有的外設(shè)資源、藍(lán)牙廣播報(bào)文以及藍(lán)牙協(xié)議棧初始化,并且以阻塞的的方式運(yùn)行藍(lán)牙,代碼如下:

const unsigned char AdvDat_HRS[]=

{//定義廣播報(bào)文

0x02,0x01,0x06,

0x03,0x19,0x41,0x03,

0x07,0x03,0x0D,0x18,0x0A,0x18,0x0F,0x18


};


int main(void)


{

BSP_Init();//初始化 SPI IO 以及ADC

radio_initBle(TXPWR_0DBM, &ble_mac_addr);//初始化藍(lán)牙芯片及藍(lán)牙協(xié)議棧,并且定義發(fā)射功率 

ble_set_adv_data((unsigned char *)AdvDat_HRS, sizeof(AdvDat_HRS));//設(shè)置BLE廣播數(shù)據(jù)

SysTick_Count = 0;

while(SysTick_Count <= 1500){};//在初始化藍(lán)牙協(xié)議棧后等待至少5ms才能正式運(yùn)行藍(lán)牙

Write_Iwdg_ON(IWDG_Prescaler_32, 0x4E2); //設(shè)置IWDG看門(mén)狗防止程序跑飛,1s不喂狗系統(tǒng)重啟

ble_run(160*2); //采用堵塞方式運(yùn)行藍(lán)牙協(xié)議,廣播間隔時(shí)間為 200ms


}

下面再介紹一下ADC操作相關(guān)的幾個(gè)函數(shù):

//在需要往APP上報(bào)實(shí)時(shí)ADC轉(zhuǎn)換數(shù)值時(shí)調(diào)用下面獲取ADC通道平均采樣值的函數(shù)


/********************************************************************************************************

**函數(shù)信息 :Get_Adc_Average(uint8_t ADC_Channel_x,uint8_t times)     

**功能描述 :獲取幾次ADC1采樣值的平均值

**輸入?yún)?shù) :ADC_Channel_x , x為0~11

**輸出參數(shù) :puiADData為ADC讀到的值

********************************************************************************************************/

u16 Get_Adc_Average(uint8_t ADC_Channel_x,uint8_t times)


{


u32 temp_val=0;


u8 t;


u8 delay;

for(t=0;t<times;t++)

{

temp_val+=ADC1_SingleChannel_Get(ADC_Channel_x);

for(delay=0;delay<100;delay++);

}

return temp_val/times;





/***************************************************************************************************

**函數(shù)信息 :ADC1_SingleChannel_Get()       

**功能描述 :獲取ADC1轉(zhuǎn)換數(shù)據(jù)

**輸入?yún)?shù) :ADC_Channel_x , x為0~11

*puiADData ,ADC1實(shí)際轉(zhuǎn)換數(shù)據(jù)

**輸出參數(shù) :ucStatus ,0 表示數(shù)據(jù)獲取失敗,1 表示成功

***************************************************************************************************/

u16 ADC1_SingleChannel_Get(uint8_t ADC_Channel_x)

{                 

u16 puiADData;

ADC_SoftwareStartConvCmd(ADC1, ENABLE); // ADCR寄存器的ADST位使能,軟件啟動(dòng)轉(zhuǎn)換

while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0); //等待ADC轉(zhuǎn)換完成標(biāo)志位置位

ADC_ClearFlag(ADC1, ADC_FLAG_EOC);//清除ADC轉(zhuǎn)換完成標(biāo)志位置位

puiADData=ADC1->ADDATA&0xfff;//讀取ADC轉(zhuǎn)換值

return puiADData;


}


/********************************************************************************************************

**函數(shù)信息 :void ADC1_SingleChannel(uint8_t ADC_Channel_x)     

**功能描述 :配置ADC1單次轉(zhuǎn)換模式

**輸入?yún)?shù) :ADC_Channel_x , x為0~11

**輸出參數(shù) :無(wú)

********************************************************************************************************/

void ADC1_SingleChannel(uint8_t ADC_Channel_x)


{


ADC_InitTypeDef  ADC_InitStructure;   


RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);


  
ADC_InitStructure.ADC_PRESCARE = ADC_PCLK2_PRESCARE_16;//初始化ADC分頻

ADC_InitStructure.ADC_Mode = ADC_Mode_Single;//初始化ADC工作模式

ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//禁止連續(xù)轉(zhuǎn)換

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //初始化ADC轉(zhuǎn)換對(duì)齊方式

ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//初始化ADC采樣精度

ADC_Init(ADC1, &ADC_InitStructure);//初始化ADC  

ADC_RegularChannelConfig(ADC1, DISABLE_ALL_CHANNEL , 0, 0); //屏蔽所有ADC通道

ADC_RegularChannelConfig(ADC1, ADC_Channel_x, 0, ADC_SampleTime_13_5Cycles); //使能選中通道

if(ADC_Channel_x == ADC_Channel_11)

{

ADC_VrefintCmd(ENABLE);//如果為通道11,則使能內(nèi)部參考電壓

}

ADC_Cmd(ADC1, ENABLE); //使能ADC1

}

我們?cè)趃att_user_send_notify_data_callback函數(shù)中給手機(jī)發(fā)送數(shù)據(jù),該函數(shù)屬于回調(diào)函數(shù),協(xié)議棧會(huì)在系統(tǒng)允許的時(shí)候(異步)回調(diào)本函數(shù),該函數(shù)可用于藍(lán)牙模塊端主動(dòng)發(fā)送數(shù)據(jù)之用,函數(shù)內(nèi)部不得增加阻塞代碼。在本應(yīng)用中我們?cè)诖撕瘮?shù)中實(shí)現(xiàn)將ADC采集并且轉(zhuǎn)換后的數(shù)據(jù)傳輸給手機(jī)APP。詳細(xì)實(shí)現(xiàn)代碼如下:

//藍(lán)牙連接成功后協(xié)議在空閑的時(shí)候會(huì)調(diào)用本回調(diào)函數(shù)

void gatt_user_send_notify_data_callback(void){ 

static unsigned char HRMData[3]={0x00,0x00,0x01};//定義裝載ADC值的存儲(chǔ)區(qū)

static unsigned char SimBatt=100;//定義裝載ADC 百分?jǐn)?shù)值的存儲(chǔ)區(qū)

static u8 Cont=0;//回調(diào)次數(shù)計(jì)數(shù)器

u16 Val=0;


Cont++; //每進(jìn)一次該函數(shù)回調(diào)次數(shù)計(jì)數(shù)器+1

if (Cont >= 20)

{//每進(jìn)入該回調(diào)函數(shù)20次才發(fā)送一次ADC數(shù)據(jù)

Cont = 0;        

Val = Get_Adc_Average(ADC_Channel_3,5); //獲取5次ADC轉(zhuǎn)換的平均值

Val = Val>>3; // 0~511 for HRM data

cur_notifyhandle = 0x12;//ADC數(shù)據(jù)回復(fù)句柄值

if (Val<0x100)

{

HRMData[0] = 0; //1Byte

HRMData[1] = Val;

sconn_notifydata(HRMData,2);//換算處理好ADC數(shù)據(jù)后通過(guò)藍(lán)牙發(fā)出

}

else

{

HRMData[0] = 1; //2Byte

HRMData[1] = Val;

HRMData[2] = Val>>8;

sconn_notifydata(HRMData,3);//換算處理好ADC數(shù)據(jù)后通過(guò)藍(lán)牙發(fā)出

}   


}

else if (10 == Cont) {//每進(jìn)入該回調(diào)函數(shù)10次才發(fā)送一次ADC數(shù)據(jù)

Val = Get_Adc_Average(ADC_Channel_3,5); //獲取5次ADC轉(zhuǎn)換的平均值

Val = Val>>3;

SimBatt = (Val*100)>>9; //0~100

cur_notifyhandle = 0x18;//ADC百分?jǐn)?shù)形式數(shù)據(jù)回復(fù)句柄值

sconn_notifydata(&SimBatt,1);/換算處理好ADC百分?jǐn)?shù)后通過(guò)藍(lán)牙發(fā)出

}


}


除了上述關(guān)鍵的藍(lán)牙數(shù)據(jù)發(fā)送函數(shù)外,下面再簡(jiǎn)單介紹一些與藍(lán)牙相關(guān)的特征值定義:

在const BLE_CHAR AttCharList[] 中定義了本案中的兩個(gè)特征值:

{TYPE_CHAR,0x11,ATT_CHAR_PROP_NTF, 0x12,0, 0x37,0x2A, UUID16_FORMAT},//ADC數(shù)值

{TYPE_CHAR,0x17,ATT_CHAR_PROP_RD|ATT_CHAR_PROP_NTF, 0x18,0,0x19,0x2A,UUID16_FORMAT},//百分?jǐn)?shù)形式

在void att_server_rdByGrType( u8 pdu_type, u8 attOpcode, u16 st_hd, u16 end_hd, u16 att_type )中實(shí)現(xiàn)了自定義特征值服務(wù)聲明。

手機(jī)操作流程如下:

打開(kāi)手機(jī)藍(lán)牙并打開(kāi) App,選擇HRM進(jìn)入,點(diǎn)擊Connect按鈕開(kāi)始搜索溫濕度藍(lán)牙設(shè)備。

選擇對(duì)應(yīng)名稱(chēng)(MM32W0_ADC)的藍(lán)牙設(shè)備并進(jìn)行配對(duì),等待連接成功。連接成功后會(huì)有相應(yīng)提示,按鈕Connect名字會(huì)變成Disconnect。

連接成功后,在App界面上電池圖標(biāo)會(huì)顯示從DEMO板上的電位器分壓得來(lái)的ADC數(shù)據(jù)信息(經(jīng)過(guò)關(guān)系換算或以百分比形式,非實(shí)際轉(zhuǎn)換值)。

手機(jī)APP圖

圖3 手機(jī)APP圖

編輯:ls  最后修改時(shí)間:2022-06-14

聯(lián)系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區(qū)桃源街道平山社區(qū)平山一路2號(hào)南山云谷創(chuàng)業(yè)園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
欧美少妇性生活视频| www.亚洲成人网| 国产三级三级看三级| 一本久道综合色婷婷五月| 男人天堂1024| 亚洲国产精品久久久久婷蜜芽| 9久久9毛片又大又硬又粗| 欧美日韩亚洲一| 可以免费观看av毛片| 免费看污黄网站| 最新av免费在线观看| 精品嫩模一区二区三区| 久久久亚洲精品无码| 成年人免费在线播放| 一区二区三区网址| 99中文字幕在线| 免费的av在线| 人妻有码中文字幕| 日韩成人av免费| 亚洲人成无码网站久久99热国产| 欧美日韩在线中文| 美女在线视频一区二区| 黄色高清视频网站| 欧美精品自拍视频| 四季av一区二区三区| 日本wwwcom| 色播五月激情五月| 久久这里只有精品18| 美女少妇一区二区| 免费在线观看视频a| 色免费在线视频| 亚洲精品蜜桃久久久久久| 在线视频日韩一区| 日韩欧美精品免费| 91福利免费观看| 日韩手机在线观看视频| 久久久久久av无码免费网站下载| 蜜臀久久99精品久久久酒店新书| av磁力番号网| 色婷婷.com| 免费男同深夜夜行网站| 国产在线视频综合| 午夜影院免费观看视频| 中文字幕第80页| 黄色一级视频片| 国产肉体ⅹxxx137大胆| 激情文学亚洲色图| www.天天射.com| 亚洲自偷自拍熟女另类| 日本手机在线视频| 91国在线高清视频| 看全色黄大色大片| 妞干网这里只有精品| 亚洲va在线va天堂va偷拍| 欧美一级黄色影院| 成人免费观看视频在线观看| 欧美激情视频免费看| 一卡二卡三卡视频| 久久这里只有精品18| 日产精品久久久久久久蜜臀| 在线观看av的网址| 国产又粗又硬又长| 裸体裸乳免费看| 日本一本草久p| 99久久久精品视频| 日韩伦理在线免费观看| 久久久一本二本三本| 国内外成人激情视频| 久久网站免费视频| 免费午夜视频在线观看| 污片在线免费看| 天天操狠狠操夜夜操| 91 视频免费观看| 免费看污污视频| 精品少妇一区二区三区在线| 国产精品69页| 6080国产精品| 精品无码国产一区二区三区av| 国产一区二区网| 成人性生生活性生交12| 在线观看日本www| 国产一级黄色录像片| 欧美日韩在线一| 免费看涩涩视频| 人妻激情另类乱人伦人妻| 欧美一区二区三区爽大粗免费 | 国产wwwxx| 警花观音坐莲激情销魂小说| 男女视频网站在线观看| 成人中文字幕av| 艳母动漫在线观看| 国产精品wwwww| 在线视频一二区| 国产精品免费入口| 黄色一级片免费播放| 久无码久无码av无码| 男人的天堂最新网址| 97超碰在线人人| 色18美女社区| 91淫黄看大片| 怡红院av亚洲一区二区三区h| 亚洲免费看av| 久久精品99国产| 日韩伦理在线免费观看| 国产免费中文字幕| 国产a视频免费观看| 日韩欧美一级在线| 不用播放器的免费av| 亚洲人成色77777| 性一交一乱一伧国产女士spa| 亚洲成人手机在线观看| 在线免费视频a| 国产黄视频在线| 日韩精品一区在线视频| 欧美性受xxxx黑人猛交88| 国产美女18xxxx免费视频| 欧美黄色一级片视频| 欧美变态另类刺激| 精品少妇人妻av免费久久洗澡| 欧美 日韩 国产精品| 日本黄色播放器| 思思久久精品视频| 午夜xxxxx| 国产在线观看中文字幕| 午夜天堂在线视频| 日韩av在线中文| 天天综合天天添夜夜添狠狠添| 少妇一级淫免费放| 亚洲欧美日韩综合网| 国产福利在线免费| 天天摸天天舔天天操| 91热视频在线观看| 51xx午夜影福利| 国产高清www| 无码人妻h动漫| 五月婷婷之综合激情| 男人的天堂最新网址| 在线免费黄色小视频| 免费成人进口网站| 欧美不卡在线播放| 国产精品97在线| 三级av免费观看| 糖心vlog在线免费观看| 无码 制服 丝袜 国产 另类| 国产又大又硬又粗| 国内自拍第二页| 男人日女人的bb| 欧洲av无码放荡人妇网站| 奇米影音第四色| 黄黄视频在线观看| 狠狠97人人婷婷五月| 狠狠干狠狠操视频| 欧美黑人在线观看| 亚洲 激情 在线| 日韩国产成人无码av毛片| 亚洲成熟丰满熟妇高潮xxxxx| 九九热99视频| 精品久久久久久久久久中文字幕| 激情五月婷婷久久| 欧美一区二区视频在线播放| www.天天射.com| 色一情一乱一乱一区91| 国产成人综合一区| 日本免费a视频| 999久久久精品视频| 国产精品又粗又长| 午夜免费视频网站| 熟女人妇 成熟妇女系列视频| 日韩欧美中文视频| 国产三级日本三级在线播放| 无码人妻精品一区二区三区99v| 大肉大捧一进一出好爽视频| 中文字幕色呦呦| 亚洲a级黄色片| 欧美成人xxxxx| 一卡二卡三卡视频| av磁力番号网| 国产精品自在自线| 亚洲36d大奶网| 116极品美女午夜一级| 国产在线xxxx| 三级黄色片免费看| 午夜剧场在线免费观看| 久草在在线视频| 欧美亚洲国产成人| 91黄色在线看| 成人av在线播放观看| 国产手机视频在线观看| 在线一区二区不卡| 日本高清一区二区视频| 五月天av在线播放| 色呦色呦色精品| 亚洲美女爱爱视频| 57pao国产成永久免费视频| 一区二区三区视频在线观看免费| 国产xxxxx视频| 国产野外作爱视频播放| 午夜免费看毛片| 色天使在线观看| 日本三日本三级少妇三级66|