|
前一段時(shí)間在*寶上買了一款0-80V 0-6A可調(diào)電源,下圖左邊的。
STM8_VI2.jpg (184.49 KB, 下載次數(shù): 137)
下載附件
2017-12-20 13:31 上傳
此款電源測(cè)量電壓的精度很不錯(cuò),但是電流非常不準(zhǔn)。250mA以下顯示0,0.5A顯示0.3A,1A時(shí)顯示0.83A。3A是準(zhǔn)的,3A以上又偏大。
沒辦法打開,拆機(jī),發(fā)現(xiàn)用的表頭在淘寶上有賣,測(cè)量電流不準(zhǔn)的原因是電流分流電阻并不是表頭配套的。
STM8_VI_Meter 11.jpg (195.34 KB, 下載次數(shù): 135)
下載附件
2017-12-20 13:31 上傳
STM8_VI_Meter22.jpg (220.55 KB, 下載次數(shù): 137)
下載附件
2017-12-20 13:31 上傳
沒有辦法,只有自己重新編程才能解決電流測(cè)量不準(zhǔn)的問題。首先對(duì)照實(shí)物繪制原理圖,如下。
STM8_VI_Meter.JPG (208.99 KB, 下載次數(shù): 181)
下載附件
2017-12-20 13:31 上傳
原來這款表頭的電流量程是50A的,需配50A的分流電阻,測(cè)量電流才能達(dá)到該表頭原有的設(shè)計(jì)精度?墒谴穗娫磪s沒有用50A的分流電阻,而是用約2毫歐的分流電阻。這樣0-6A在分流電阻上的電壓為 0-12mV。
對(duì)照原理圖測(cè)量電流部分可以得出:運(yùn)放部分的放大倍數(shù)為 23(188.2/8.2)- 35(288.2/8.2),輸出電壓為 0-420mV。這個(gè)電壓太小,因?yàn)镾TM8的ADC輸入電壓可以到3300mV,所以我將放大電阻R6有原來的180k換成了1M,這樣放大倍數(shù)就變成 123-135,運(yùn)放的輸出電壓為 0-1620mV。
實(shí)際上,放大倍數(shù)在 3300/12=275時(shí)最理想(R6換成2M左右),可以充分利用ADC的轉(zhuǎn)換精度。但我手頭只有1M貼片,就沒有再折騰了。
然后就是編程了,STM8是第一次,一直在用STM32。就在網(wǎng)上找了些例子,幾番折騰終于能夠編譯和下載了。
電壓測(cè)量校準(zhǔn)比較簡(jiǎn)單,只調(diào)整電位器就能達(dá)到不錯(cuò)的精度。不過我還是用軟件作了多區(qū)間線形校正。
10V以下精度 <1%,10V以上精度 <0.5%
電流校正沒有分區(qū)間,精度基本做到 <1%。
下面是自己編程的工程文件,可以直接修改編譯。
STM8S單片機(jī)源程序(IAR環(huán)境)如下:
- #include "math.h"
- //#include "stdbool.h"
- #include "iostm8s003f3.h"
- #include "stm8s.h" //包含用到的外設(shè)的頭文件
- #define u8 unsigned char
- #define uchar unsigned char
- #define uint unsigned int
- #define sCnt 104
- uint ms_count, tmpin, ADCBuff[6], ADValueV[sCnt], ADValueI[sCnt], ADCData, mA;
- u8 pDataV=0, pDataI=0, vDotPS, cDotPS, VGain = 35, ampGain = 129, vFlag=0, iFlag=0;
- unsigned long mV; //uint的話,mV最大只能到 65535mV,本電源80V,故用long
- float voltRAW, curtRAW, Rs = 0.00218;
- float ADVal_Av[2]={0}, Val_Av[2]={0};
- float preCoef[2]={0.005}; //ADC 轉(zhuǎn)換濾波噪聲用的系數(shù)
- bool preTrend[2]={TRUE}; //ADC 轉(zhuǎn)換結(jié)果的變化趨勢(shì) true:變大,false:變小
- float ADvalue[2]={0.0}; //ADC 前次的轉(zhuǎn)換結(jié)果濾波后的值
- float newData[2]={0.0}; //ADC 本次次的轉(zhuǎn)換結(jié)果
- /*******************************************************************************
- **函數(shù)名稱:void GPIO_Init0()
- **功能描述:GPIO->功能引腳初始化
- **入口參數(shù):無
- **輸出:無
- *******************************************************************************/
- void GPIO_Init0()
- {
- PA_ODR |=0x02; //PA1置高,I個(gè)位選通
- PA_ODR &=0xf3; //PA2,3置零,g,f
- PA_DDR |=0x0e; //設(shè)置端口PA1,2,3的輸入輸出方向寄存器為輸出方向
- PA_CR1 |=0x0e; //PA1,2,3為推挽輸出
- PA_CR2 |=0x0e; //PA1,2,3是輸出速度最快為10MHz
-
- PB_ODR |=0x30; //PB4,5置高,I十位和百位選通
- PB_DDR |=0x30; //設(shè)置端口PB4,5的輸入輸出方向寄存器為輸出方向
- PB_CR1 |=0x30; //PB4,5為推挽輸出
- PB_CR2 |=0x30; //PB4,5是輸出速度最快為10MHz
-
- PC_ODR &=0x07; //置零PC3,4,5,6,7, c,f,h,d,e
- PC_DDR |=0xf8; //設(shè)置端口PC->3,4,5,6,7的輸入輸出方向寄存器為輸出方向
- PC_CR1 |=0xf8; //PC->3,4,5,6,7為推挽輸出
- PC_CR2 |=0xf8; //PC->3,4,5,6,7是輸出速度最快為10MHz
-
- PD_ODR &=0xfd; //置零PD1, a
- PD_ODR |=0x70; //PD4,5,6置高 V百位 個(gè)位 和十位選通
- PD_DDR |=0x72; //設(shè)置端口PD->1,4,5,6的輸入輸出方向寄存器為輸出方向
- PD_CR1 |=0x72; //PD->1,4,5,6為推挽輸出
- PD_CR2 |=0x72; //PD->1,4,5,6是輸出速度最快為10MHz
- }
- /*******************************************************************************
- **函數(shù)名稱:void SMG_Display(int num)
- **功能描述:SMG顯示函數(shù)
- **入口參數(shù):int num
- **輸出:無
- *******************************************************************************/
- void SMG1_Display(unsigned char num)
- {
- PA_ODR |=0x02; //PA1置高,I個(gè)位選通
- PB_ODR |=0x30; //PB4,5置高,I十位和百位選通
- PD_ODR |=0x70; //PD4,5,6置高 V百位 個(gè)位 和十位選通
- switch(num)
- {
- case 0: //a b c d e f
- PA_ODR |=0x08; //PA3置高,b
- PA_ODR &=0xfb; //PA2置零,g
- PC_ODR &=0xdf; //置零PC5,h
- PC_ODR |=0xd8; //PC3,4,6,7置高 c,f,d,e
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 1: //b c
- PA_ODR |=0x08; //PA3置高,b
- PA_ODR &=0xfb; //PA2置零,g
- PC_ODR &=0x0f; //置零PC4,5,6,7,f,h,d,e
- PC_ODR |=0x08; //PC3置高 c
- PD_ODR &=0xfd; //PD1置零 a
- break;
- case 2: // a b d e g
- PA_ODR |=0x0c; //PA2,3置高,g,b
- PC_ODR &=0xc7; //置零PC3,4,5 c,f,h
- PC_ODR |=0xc0; //PC6,7置高,d e
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 3: //a b c d g
- PA_ODR |=0x0c; //PA2,3置高,g,b
- PC_ODR &=0x4f; //置零PC4,5,7,f,h,e
- PC_ODR |=0x48; //PC3,6置高 c,d
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 4: //b c f g
- PA_ODR |=0x0c; //PA2,3置高,g,b
- PC_ODR &=0x1f; //置零PC5,6,7,h,d,e
- PC_ODR |=0x18; //PC3,4置高 c,f
- PD_ODR &=0xfd; //PD1置零 a
- break;
- case 5: //a c d f g
- PA_ODR |=0x04; //PA2置高,g
- PA_ODR &=0xf7; //PA3置零,b
- PC_ODR &=0x5f; //置零PC5,7 h,e
- PC_ODR |=0x58; //PC3,4,6置高 c,f,d
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 6: //a c d e f g
- PA_ODR |=0x04; //PA2置高,g
- PA_ODR &=0xf7; //PA3置零,b
- PC_ODR &=0xdf; //置零PC5,h
- PC_ODR |=0xd8; //PC3,4,6,7置高 c,f,d,e
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 7: //a b c
- PA_ODR |=0x08; //PA3置高,b
- PA_ODR &=0xfb; //PA2置零,g
- PC_ODR &=0x0f; //置零PC4,5,6,7,f,h,d,e
- PC_ODR |=0x08; //PC3置高 c
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 8: //a b c d e f g
- PA_ODR |=0x0c; //PA2,3置高,g,b
- PC_ODR &=0xdf; //置零PC5,h
- PC_ODR |=0xd8; //PC3,4,6,7置高 c,f,d,e
- PD_ODR |=0x02; //PD1置高 a
- break;
- case 9: //a b c d f g
- PA_ODR |=0x0c; //PA2,3置高,g,b
- PC_ODR &=0x5f; //置零PC5,7 h,e
- PC_ODR |=0x58; //PC3,4,6置高 c,f,d
- PD_ODR |=0x02; //PD1置高 a
- break;
- }
- }
- /*******************************************************************************
- **函數(shù)名稱:void ADC_Init()
- **功能描述:初始化ADC
- **入口參數(shù):無
- **輸出:無
- *******************************************************************************/
- void ADC_Init()
- {
- //電流
- PD_DDR_bit.DDR2 = 0; //設(shè)置PD->2 為輸入
- PD_CR1_bit.C12 = 0; //設(shè)置為浮空輸入
- PD_CR2_bit.C22 = 0; //設(shè)置中斷禁止
-
- //電壓
- PD_DDR_bit.DDR3 = 0; //設(shè)置PD->3 為輸入
- PD_CR1_bit.C13 = 0; //設(shè)置為浮空輸入
- PD_CR2_bit.C23 = 0; //設(shè)置中斷禁止
-
- ADC_CR1_bit.SPSEL = 7; //fmaster / 18 = 16MHZ / 18 = 888888HZ
- ADC_CR2_bit.ALIGN = 1; //RIGHT ALIGN
-
- ADC_CR1_bit.ADON = 1; //初次上電喚醒ADC
- }
- /*******************************************************************************
- **函數(shù)名稱:uint Get_Adc(unsigned char ac)
- **功能描述:讀取ADC完成一次模數(shù)轉(zhuǎn)換結(jié)果
- **入口參數(shù):ac ->ADC通道號(hào)
- **輸出:ADC轉(zhuǎn)換結(jié)果
- *******************************************************************************/
- uint Get_Adc(u8 ac) //獲取adc值
- {
- uint Value;
- ADC_CSR_bit.CH = ac; //選擇ADC通道 AIN3,4
- ADC_CR1 |= 0x01; //開始轉(zhuǎn)換
- while((0x80&ADC_CSR)==0); //等待轉(zhuǎn)換完成
- ADC_CSR &= ~0x80; //清除轉(zhuǎn)換標(biāo)志
- Value = (uint)ADC_DRL; //取低8位
- Value |= (uint)ADC_DRH<<8; //低8位和高兩位合并
- return(Value); //返回adc值
- }
- float* Ad_Av(u8 ac) //每次只采樣一個(gè)數(shù)據(jù),采完sCnt個(gè)數(shù)據(jù)就更新結(jié)果,否則就顯示上一次的結(jié)果
- {
- u8 num, pMaxV=0, pMaxV2=0, pMinV=0, pMinV2=0, pMaxI=0, pMaxI2=0, pMinI=0, pMinI2=0;
- if(ac==4){ //電壓
- ADValueV[pDataV] = Get_Adc(ac);
- Val_Av[0] += ADValueV[pDataV++];
- }else{ //電流
- ADValueI[pDataI] = Get_Adc(ac);
- Val_Av[1] += ADValueI[pDataI++];
- }
- if(pDataV>=sCnt){ //電壓數(shù)據(jù)采樣完成,去除最大最小求平均
- pDataV=0; vFlag=1;
- for(num=0;num<sCnt;num++) {
- if(ADValueV[num] < ADValueV[pMinV]) pMinV = num;
- if(ADValueV[num] > ADValueV[pMaxV]) pMaxV = num;
- }
- for(num=0;num<sCnt;num++) { //去掉次大次小
- if(num != pMinV && ADValueV[num] < ADValueV[pMinV2]) pMinV2 = num;
- if(num != pMaxV && ADValueV[num] > ADValueV[pMaxV2]) pMaxV2 = num;
- }
- ADVal_Av[0] = (Val_Av[0] - ADValueV[pMinV] - ADValueV[pMinV2] - ADValueV[pMaxV] - ADValueV[pMaxV2])/(sCnt-4);
- //ADVal_Av[0] = (Val_Av[0] - ADValueV[pMinV] - ADValueV[pMaxV])/(sCnt-2); //只去掉最大最小的話,用這句
- Val_Av[0]=0;
- }
- if(pDataI>=sCnt){ //電流數(shù)據(jù)采樣完成,去除最大最小求平均
- pDataI=0; iFlag=1;
- for(num=0;num<sCnt;num++) {
- if(ADValueI[num] < ADValueI[pMinI]) pMinI = num;
- if(ADValueI[num] > ADValueI[pMaxI]) pMaxI = num;
- }
- for(num=0;num<sCnt;num++) { //如果還要去掉次大次小的話,就去掉注釋
- if(num != pMinI && ADValueI[num] < ADValueI[pMinI2]) pMinI2 = num;
- if(num != pMaxI && ADValueI[num] > ADValueI[pMaxI2]) pMaxI2 = num;
- }
- ADVal_Av[1] = (Val_Av[1] - ADValueI[pMinI] - ADValueI[pMinI2] - ADValueI[pMaxI] - ADValueI[pMaxI2])/(sCnt-4);
- //ADVal_Av[1] = (Val_Av[1] - ADValueI[pMinI] - ADValueI[pMaxI])/(sCnt-2); //只去掉最大最小的話,用這句
- Val_Av[1]=0;
- }
- return(ADVal_Av);
- }
- /***** 噪聲濾波 *******************
- baseCoef:濾波系數(shù),越小濾波越強(qiáng);
- i:通道,可供多個(gè)測(cè)量對(duì)象濾波
- preCoef:上次濾波后計(jì)算的系數(shù)值
- preTrend:上次濾波的數(shù)據(jù)變化方向
- preData:上次濾波后的結(jié)果
- newData:這次新采樣的數(shù)據(jù)
- ***********************************************************************/
- void Noise_Filter(float baseCoef, u8 i, float *preCoef, bool *preTrend, float *preData, float *newData){
- bool newTrend;
- if (newData[i] == preData[i]) return;
- if (newData[i] > preData[i]) newTrend = TRUE;
- else newTrend = FALSE;
- if (newTrend == preTrend[i]) preCoef[i] = preCoef[i] * 2;
- else preCoef[i] = baseCoef;
- preTrend[i] = newTrend;
- if(preCoef[i] < baseCoef) preCoef[i] = baseCoef;
- else if(preCoef[i] > 0.995) preCoef[i] = 0.995;
- preData[i] = preData[i] + (newData[i] - preData[i])* preCoef[i];
- }
- /***** 電壓數(shù)據(jù)處理 ***************************************
- tmpin:采集的電壓數(shù)據(jù);
- 輸出:電壓值,單位:V
- *********************************************************/
- float ProcessVoltage(float tmpin)
- {
- float Temp;
- Temp = tmpin * 3.3 * VGain / 1023; //單位:V
- //下面是校正,應(yīng)根據(jù)實(shí)際情況重新計(jì)算。其實(shí)不校正精度也不錯(cuò)
- if(Temp<=0.5) Temp = 1.0 * Temp;
- else if(Temp>0.5 && Temp<2.5) Temp = 0.98 * Temp + 0.28;
- else if(Temp<6.5) Temp = 1.005 * Temp + 0.235;
- else if(Temp<11.5) Temp = 1.00325 * Temp + 0.22925;
- else if(Temp<36.5) Temp = 0.990417 * Temp + 0.385;
- else Temp = 0.988889 * Temp + 0.482222;
- if(Temp<0) Temp=0;
- return (Temp);
-
- }
- /***** 電流數(shù)據(jù)處理 ***************************************
- tmpin:采集的電流數(shù)據(jù);
- 輸出:電流值,單位:A
- *********************************************************/
- float ProcessCurrent(float tmpin)
- {
- float Temp;
- Temp = tmpin * 3.3 / 1023 / ampGain / Rs; //單位:A
- //下面是校正,應(yīng)根據(jù)實(shí)際情況重新計(jì)算。本例中是將運(yùn)放的反饋電阻 R6(180k)
- //改成 1M后,放大系數(shù)ampGain由29變?yōu)?29。
- //取樣電阻 Rs約為 2mR。
- Temp = 1.385042 * Temp - 1.698751;
- if(Temp<0) Temp=0;
- return (Temp);
-
- }
- /**** 本例中未使用 ******************************************************
- **函數(shù)名稱:void Timer4Init()
- **功能描述:定時(shí)器4參數(shù)初始化
- **入口參數(shù):無
- **輸出:無
- *******************************************************************************/
- void Timer4Init()
- {
- TIM4_IER_bit.UIE = 0; //禁止中斷
- TIM4_EGR_bit.UG = 0;
- TIM4_PSCR_bit.PSC = 7; // 設(shè)置TIM4的時(shí)鐘分頻系數(shù)為 128 即定時(shí)器時(shí)鐘 = 16000000 /128 = 125KHZ
-
- TIM4_ARR = 125; // 設(shè)定TIM4產(chǎn)生1毫秒的計(jì)數(shù)值
- TIM4_CNTR = 0x00; // 清除TIM4計(jì)數(shù)寄存器數(shù)值
-
- TIM4_SR_bit.UIF = 0; //清除中斷標(biāo)志
- TIM4_SR_bit.TIF = 0;
- TIM4_CR1_bit.CEN = 1; //使能定時(shí)器4計(jì)數(shù)
- TIM4_CR1_bit.ARPE = 1; //使能預(yù)裝載
- TIM4_IER_bit.UIE = 1; // 使能更新中斷
- }
- /**** 本例中未使用 *******************************************************
- **函數(shù)名稱:void TIM2_Init()
- **功能描述:定時(shí)器2參數(shù)初始化
- **入口參數(shù):無
- **輸出:無
- *******************************************************************************/
- void TIM2_Init()
- {
- TIM2_PSCR = 0x00; //定時(shí)器2預(yù)分頻數(shù)為 1 分頻,即定時(shí)器時(shí)鐘 = 系統(tǒng)時(shí)鐘 = 16MHz
- TIM2_ARRH = 0x3E; //設(shè)置1毫秒時(shí)間自動(dòng)重載 16000 = 0x3e80
- TIM2_ARRL = 0x80; //
- TIM2_CNTRH = 0x00; //清除計(jì)數(shù)寄存器
- TIM2_CNTRL = 0x00; //
- TIM2_SR1 = 0x00; //清除所有的中斷標(biāo)志
-
- }
- /**** 本例中未使用 ******************************************************
- **函數(shù)名稱:void TIM2_DelayMs(unsigned int ms)
- **功能描述:定時(shí)器2參進(jìn)行精確延時(shí),最小為1毫秒,最大65535
- **入口參數(shù):unsigned int ms 1=< ms <= 65535
- **輸出:無
- *******************************************************************************/
- void TIM2_DelayMs(unsigned int ms)
- {
-
- TIM2_CR1 = 0x81; //啟動(dòng)定時(shí)器2開始計(jì)數(shù)
- while(ms--)
- {
-
- while( !(TIM2_SR1 & 0x01)); //等待計(jì)數(shù)是否達(dá)到1毫秒
- TIM2_SR1 &= ~(0x01); //計(jì)數(shù)完成1毫秒,清除相應(yīng)的標(biāo)志
- }
- TIM2_CR1 = 0x00; //延時(shí)全部結(jié)束,關(guān)閉定時(shí)器2
- }
- /*******************************************************************************
- **函數(shù)名稱:void delay(unsigned int ms)
- **功能描述:大概延時(shí)
- **入口參數(shù):unsigned int ms 輸入大概延時(shí)數(shù)值
- **輸出:無
- *******************************************************************************/
- void delay(unsigned int ms)
- {
- unsigned int x , y;
- for(x = ms; x > 0; x--) /* 通過一定周期循環(huán)進(jìn)行延時(shí)*/
- for(y = 1000 ; y > 0 ; y--);
- }
- /*******************************************************************************
- **函數(shù)名稱:void V_Show()
- **功能描述:在數(shù)碼管上顯示電壓值
- **入口參數(shù):ms:每個(gè)數(shù)碼管延時(shí)。顯示數(shù)據(jù)存儲(chǔ)在 ADCBuff[2] - ADCBuff[0]
- **輸出:無
- *******************************************************************************/
- void V_Show(unsigned int ms)
- {
- SMG1_Display(ADCBuff[2]); //顯示V百位
- if(vDotPS==2) PC_ODR |=0x20; //PC5置高,h點(diǎn)
- PD_ODR &=0xef; //PD4置低 V百位選通
- delay(ms);
- SMG1_Display(ADCBuff[1]); //顯示V十位
- if(vDotPS==1) PC_ODR |=0x20; //PC5置高,h點(diǎn)
- PD_ODR &=0xbf; //PD6置低 V十位選通
- delay(ms);
- SMG1_Display(ADCBuff[0]); //顯示V個(gè)位
- PD_ODR &=0xdf; //PD5置低 V個(gè)位選通
- delay(ms);
- }
- /*******************************************************************************
- **函數(shù)名稱:void I_Show()
- **功能描述:在數(shù)碼管上顯示電流值
- **入口參數(shù):ms:每個(gè)數(shù)碼管延時(shí)。顯示數(shù)據(jù)存儲(chǔ)在 ADCBuff[5] - ADCBuff[3]
- **輸出:無
- *******************************************************************************/
- void I_Show(unsigned int ms)
- {
- SMG1_Display(ADCBuff[5]); //顯示A百位
- if(cDotPS==5) PC_ODR |=0x20; //PC5置高,h點(diǎn)
- PB_ODR &=0xdf; //PB5置低,I百位選通
- delay(ms);
- SMG1_Display(ADCBuff[4]); //顯示A十位
- if(cDotPS==4) PC_ODR |=0x20; //PC5置高,h點(diǎn)
- PB_ODR &=0xe0; //PB4置低,I十位選通
- delay(ms);
- SMG1_Display(ADCBuff[3]); //顯示A個(gè)位
- PA_ODR &=0xfd; //PA1置低,I個(gè)位選通
- delay(ms);
- }
- /* 主函數(shù) */
- int main(void)
- {
- //asm("sim"); //關(guān)閉系統(tǒng)總中斷
- CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 內(nèi)部時(shí)鐘 = 16Mhz
- GPIO_Init0();
- ADC_Init(); //調(diào)用ADC初始化函數(shù)
- //TIM2_Init();
- //Timer4Init(); //初始化定時(shí)器4
- //asm("rim"); //打開系統(tǒng)總中斷
- while(1)
- {
- //if(adcflag == 1) //1秒定時(shí)時(shí)間到對(duì)使能ADC進(jìn)行采樣
- //{
- //asm("sim"); //關(guān)系統(tǒng)總中斷
- voltRAW = Ad_Av(4)[0]; //獲取電壓數(shù)據(jù)
- if(vFlag==1){ //電壓數(shù)據(jù)采集完成才進(jìn)行以下計(jì)算,否則跳過,將顯示上次數(shù)據(jù)
- vFlag=0;
- newData[0] = ProcessVoltage(voltRAW);
- Noise_Filter(0.5, 0, preCoef, preTrend, ADvalue, newData);
- //ADvalue[0] = newData[0]; //不要上面的濾波時(shí)使用
- mV = (unsigned long)(ADvalue[0]*1000);
- if(mV > 9999){
- vDotPS=1;
- ADCBuff[0] = mV / 100 % 10; //0.1V
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.jpg (18.12 KB, 下載次數(shù): 133)
下載附件
2017-12-20 17:03 上傳
所有資料51hei提供下載:
STM8S_VIMeter.zip
(1.16 MB, 下載次數(shù): 803)
2017-12-20 13:33 上傳
點(diǎn)擊文件名下載附件
STM8_VIMeter工程文件 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|