RM新时代网站-首页

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

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

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

stm32+cc1101無(wú)線(xiàn)接收數(shù)據(jù)不穩(wěn)定? 淺談stm32+cc1101的低功耗

ss ? 作者:工程師譚軍 ? 2018-09-06 10:49 ? 次閱讀

本文主要是關(guān)于stm32+cc1101的相關(guān)介紹,并著重對(duì)stm32+cc1101的數(shù)據(jù)傳輸及其低功耗進(jìn)行了詳盡的闡述。

stm32+cc1101無(wú)線(xiàn)接收數(shù)據(jù)不穩(wěn)定

發(fā)出側(cè)向命令

檢查T(mén)XFIFO中的字節(jié)數(shù),

如果超過(guò)0,那么Flush TXFIFO

用數(shù)據(jù)填充TXFIFO

發(fā)出STX命令,就是這樣。

現(xiàn)在,您可以調(diào)用MARCSTATE(重復(fù)地和快速地)查看內(nèi)部狀態(tài)機(jī)通過(guò)發(fā)送數(shù)據(jù)的不同步驟。

RX側(cè):

發(fā)出側(cè)向命令

檢查RXFIFO中的字節(jié)數(shù),

如果超過(guò)0,那么Flush RXFIFO

發(fā)布SRX命令,就是這樣。

現(xiàn)在,您可以調(diào)用MARCSTATE(重復(fù)地和快速地)查看內(nèi)部狀態(tài)機(jī)通過(guò)發(fā)送數(shù)據(jù)的不同步驟。

stm32+cc1101無(wú)線(xiàn)接收數(shù)據(jù)不穩(wěn)定? 淺談stm32+cc1101的低功耗

淺談stm32+cc1101的低功耗

電路設(shè)計(jì)上,只用到了一個(gè)LED、串口1、一個(gè)模擬SPI、一個(gè)中斷線(xiàn)、一個(gè)讀卡芯片RESET線(xiàn),硬件上就只剩下這么點(diǎn)東西了,這個(gè)時(shí)候我采用的是待機(jī)模式,使用的是讀卡芯片的中斷接PA0喚醒STM32,在此之前要先使得讀卡芯片進(jìn)入低功耗、然后STM32進(jìn)入低功耗,這一步完成了,貌似沒(méi)什么問(wèn)題,功耗確實(shí)從幾十mA驟降到3mA左右,開(kāi)始還挺滿(mǎn)意的,但是測(cè)試廠(chǎng)商提供的樣板,功耗卻只有幾十uA,有點(diǎn)郁悶了。為什么會(huì)這樣?反復(fù)查看硬件、程序,都找不出原因,而且這個(gè)時(shí)候的工作效果很爛,根本就不能喚醒,所以我就懷疑是讀卡芯片一端低功耗有問(wèn)題,因?yàn)槲覍A0腳直接短接VCC,這樣就可以產(chǎn)生一個(gè)邊沿觸發(fā)STM32喚醒了,但是用讀卡芯片無(wú)法喚醒,所以我懷疑是讀卡芯片的RESET腳電平不對(duì),經(jīng)檢查,確實(shí)是因?yàn)镽ESET腳加了上拉電阻,讀卡芯片是高電平復(fù)位,在STM32進(jìn)入待機(jī)后,管腳全都浮空了,導(dǎo)致RESET被拉高,一直在復(fù)位;我去掉上拉電阻,覺(jué)得很有希望解決問(wèn)題了,但是測(cè)試結(jié)果是:有時(shí)候能喚醒,有時(shí)候不能,我仔細(xì)一想難道是因?yàn)镾TM32待機(jī)后管腳電平不確定,導(dǎo)致讀卡芯片RESET腳電平不定,而工作不正常,看樣子只有換用其他方案了。后面確實(shí)驗(yàn)證了我的想法,使用STOP模式后,喚醒問(wèn)題引刃而解。

就在關(guān)鍵時(shí)刻,芯片原廠(chǎng)火種送炭,送來(lái)急需的技術(shù)支持資料,一個(gè)包含低功耗源代碼,趕緊拿過(guò)來(lái)測(cè)試,先研讀下代碼,使用的是STOP模式,而不是待機(jī)模式,使用的是任意外部中斷喚醒,功耗低制40uA,這個(gè)時(shí)候就相當(dāng)激動(dòng)啊,趕快下載測(cè)試啊,結(jié)果功耗確實(shí)降了,但還是有1mA,更人家一比多了幾十倍啊。。。

我第一反應(yīng)是硬件不對(duì),經(jīng)過(guò)測(cè)試修改,首先找到第一個(gè)原因,讀卡芯片RESET管腳上拉電阻又給焊上去了。。.,拆掉后功耗驟降到幾百u(mài)A,還是不行。。 測(cè)試過(guò)程中,為了去掉LDO的干擾,整板采用3.3V供電,但是后面經(jīng)過(guò)測(cè)試,LDO的功耗其實(shí)也只有5uA不到,這LDO功耗值得贊一個(gè);雖然結(jié)果還是沒(méi)達(dá)到預(yù)期,但是看到了希望,勝利就在眼前啊。

為此我反復(fù)看了技術(shù)支持提供的程序,發(fā)現(xiàn)他們的STM32的所有管腳都的設(shè)置都有所考究:(因?yàn)?a target="_blank">公司保密原則,代碼中刪除掉了關(guān)于該讀卡芯片的前綴信息等)

GPIO_InitTypeDef GPIO_InitStructure;

/* GPIOA Periph clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

/* GPIOB Periph clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

/* GPIOC Periph clock enable */

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

//####################################################

//USART1 Port Set

//TXD

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//RXD

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//RST output pushpull mode

GPIO_InitStructure.GPIO_Pin = TRST;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(PORT1, &GPIO_InitStructure);

//IRQ input pull-up mode

GPIO_InitStructure.GPIO_Pin = TIRQ;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(PORT1, &GPIO_InitStructure);

//MISO input pull-up mode

GPIO_InitStructure.GPIO_Pin = MISO;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(PORT2, &GPIO_InitStructure);

//NSS,SCK,MOSI output pushpull mode

GPIO_InitStructure.GPIO_Pin = (NSS|SCK|MOSI);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(PORT2, &GPIO_InitStructure);

//############################################################################

//TEST Port set

//TESTO input pushpull mode

GPIO_InitStructure.GPIO_Pin = TESTO;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(TEST_PORT, &GPIO_InitStructure);

//############################################################################

//TEST Port set

//TESTI output pushpull mode

GPIO_InitStructure.GPIO_Pin = TESTI;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(TEST_PORT, &GPIO_InitStructure);

//############################################################################

//LED Port Set

//LED output pushpull mode

GPIO_InitStructure.GPIO_Pin = LED;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(LED_PORT, &GPIO_InitStructure);

//############################################################

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_15);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOC, &GPIO_InitStructure);

首先,想MOSI、SCK、CS、LED、RST這些管腳應(yīng)該設(shè)置為推挽輸出,TXD設(shè)置為復(fù)用輸出,而IRQ、RXD、MISO設(shè)置浮空輸入,什么都沒(méi)接的管腳全都設(shè)置為下拉輸入,而TESTI、TESO我一直不解是什么東東,開(kāi)始就沒(méi)管,而開(kāi)始的時(shí)候MISO我也沒(méi)怎么注意,設(shè)置成上拉輸入(而不是浮空輸入),反正大部分按照廠(chǎng)家提供的參考,我并沒(méi)有照搬,測(cè)試效果一樣,但功耗確是還有80-90uA,期間我找了好久沒(méi)找到原因,給技術(shù)支持一看,原來(lái)是因?yàn)镸ISO沒(méi)有設(shè)置成浮空輸入,我是設(shè)置成了上拉輸入,上拉電阻一直在消耗大約40uA的電流。。。 好吧,這是自己不夠細(xì)心導(dǎo)致的,以后做低功耗的項(xiàng)目管腳配置是個(gè)大問(wèn)題,不能再這么馬虎了!?。?我將MISO設(shè)置成浮空輸入之后,最低功耗還是有40+,離10uA的最低功耗還有段距離,到底是為什么呢?最后我發(fā)現(xiàn)

,該讀卡芯片有個(gè)TESTIN/TESTOUT管腳,是用來(lái)測(cè)試用的,出廠(chǎng)后也就用不上了,我也一直以為這兩個(gè)腳確實(shí)沒(méi)什么用,就沒(méi)接;可是我發(fā)現(xiàn)廠(chǎng)家提供的樣板居然接了這兩個(gè)腳,但是廠(chǎng)商也沒(méi)說(shuō)這兩個(gè)腳接或不接會(huì)影響功耗啊,抱著試一試的心態(tài),我我把TESTIN/TESTOUT兩個(gè)管腳接到單片機(jī)上進(jìn)行相應(yīng)的配置,接下來(lái)是見(jiàn)證奇跡的時(shí)刻了,功耗居然真的、真的降到10uA了。。。。。。。。。。。 此處省略n個(gè)字

這時(shí)候真的很激動(dòng),真的很想罵人啊,坑爹的廠(chǎng)家,為什么不給提示說(shuō)這兩個(gè)腳不接單片機(jī)會(huì)消耗電流呢?(也許是文檔里面提到了,但是幾百頁(yè)的文檔,還是全英文的,一堆堆的文字,我再看一遍,確實(shí)沒(méi)有提到這兩個(gè)管腳會(huì)有漏電流。)

項(xiàng)目就這樣完工了,中間最重要的是技術(shù)支持的強(qiáng)力支持,不然項(xiàng)目不能完工了,這個(gè)項(xiàng)目低功耗STM32方面難度不高,主要是讀卡芯片上面的低功耗調(diào)試起來(lái)問(wèn)題很多,還是人家原廠(chǎng)的出馬才解決了問(wèn)題,因?yàn)楸姸嘣?,不能公布該芯片的資料,包括該芯片怎么進(jìn)入低功耗也無(wú)法公開(kāi),所以抱歉~~。

關(guān)于STM32進(jìn)入低功耗,我簡(jiǎn)單的總結(jié)了一下:

1.管腳設(shè)置,這個(gè)很關(guān)鍵,還是跟你電路有關(guān)系,外加上拉、下拉電阻切記不能隨便加

2.STM32的systick clock、DMA、TIM什么的,能關(guān)就全都關(guān)掉,STM32低功耗很簡(jiǎn)單,關(guān)鍵是外圍電路功耗是關(guān)鍵

3.選擇一個(gè)低功耗的LDO,這個(gè)項(xiàng)目用到的LDO功耗就很不錯(cuò),靜態(tài)功耗10uA都不到。

4.確定STM32設(shè)置沒(méi)問(wèn)題,進(jìn)入低功耗有好幾種情況可以選擇(睡眠、停機(jī)、待機(jī)),我還是推薦選擇STOP模式,這個(gè)我覺(jué)的比較好是因?yàn)榭梢匀我馔獠恐袛喽伎梢詥拘?,而且管腳可以保留之前的設(shè)置,進(jìn)入停機(jī)模式的代碼使用庫(kù)函數(shù)自帶的,就一句:

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

意思是,在進(jìn)入停機(jī)模式之前,也關(guān)掉電壓調(diào)節(jié)器,進(jìn)一步降低功耗,使用WFI指令(任意中斷喚醒),但是經(jīng)過(guò)測(cè)試,使用WFE(任事件喚醒)指令效果、功耗一模一樣。

最后一步是從STOP模式怎么恢復(fù)了,恢復(fù)其實(shí)也很簡(jiǎn)單,外部中斷來(lái)了會(huì)進(jìn)入中斷函數(shù),然后STM32就被喚醒,喚醒還要做一些工作,需要開(kāi)啟外部晶振(當(dāng)然你也可以選擇使用內(nèi)部自帶振蕩器)、開(kāi)啟你需要的外設(shè)等等。

結(jié)語(yǔ)

關(guān)于stm32+cc1101的相關(guān)介紹就到這了,如有不足之處歡迎指正。

相關(guān)閱讀推薦:基于STM32F103RB和CC1101的無(wú)線(xiàn)數(shù)傳模塊設(shè)計(jì)相關(guān)閱讀推薦:基于STM32的可遙控智能跟隨小車(chē)的設(shè)計(jì)與實(shí)現(xiàn)

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

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355730
  • CC1101
    +關(guān)注

    關(guān)注

    4

    文章

    36

    瀏覽量

    23140
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無(wú)線(xiàn)通訊模塊 cc1101無(wú)線(xiàn)模塊

    SPI 遙控模塊 無(wú)線(xiàn)模塊概述芯威科技VT-CC1101-433M基于TI Chipcon的CC1101無(wú)線(xiàn)收發(fā)芯片設(shè)計(jì),是一款完整的、體積小巧的、
    發(fā)表于 08-07 17:37

    CC1101組網(wǎng)與假死問(wèn)題

    ,什么原因?關(guān)于MSP430與CC1101低功耗問(wèn)題為什么CC1101信道出現(xiàn)串?dāng)_現(xiàn)象?STM32+CC1101組網(wǎng)問(wèn)題請(qǐng)教
    發(fā)表于 08-29 17:45

    淺談無(wú)線(xiàn)射頻CC1101芯片的特點(diǎn)與CC1100的區(qū)別

    用于極低功耗RF應(yīng)用。其主要針對(duì)工業(yè)、科研和醫(yī)療(ISM)以及短距離無(wú)線(xiàn)通信設(shè)備(SRD)。CC1101可提供對(duì)數(shù)據(jù)包處理、數(shù)據(jù)緩沖、突發(fā)傳
    發(fā)表于 11-17 10:57

    CC1101低功耗RF無(wú)線(xiàn)射頻芯片

    CC1101[1] 是一款低于1GHz設(shè)計(jì)旨在用于極低功耗RF應(yīng)用。其主要針對(duì)工業(yè)、科研和醫(yī)療(ISM)以及短距離無(wú)線(xiàn)通信設(shè)備(SRD)。CC1101可提供對(duì)
    發(fā)表于 11-18 11:20

    cc1101數(shù)據(jù)手冊(cè)

    cc1101數(shù)據(jù)手冊(cè),此數(shù)據(jù)手冊(cè)為ti最新版本。
    發(fā)表于 02-17 17:11 ?16次下載

    CC1101無(wú)線(xiàn)模塊如何使用_cc1101無(wú)線(xiàn)模塊的程序及使用介紹

    CC1101無(wú)線(xiàn)模塊是采用TI公司的CC1101芯片制作的模塊,一般是工作在433M。長(zhǎng)沙云寶電子科技有限公司的生產(chǎn)的CC1101無(wú)線(xiàn)模塊比
    發(fā)表于 04-12 15:29 ?1.8w次閱讀

    CC1101 低功耗(低于 1GHz)射頻收發(fā)器

    電子發(fā)燒友網(wǎng)為你提供TI(ti)CC1101相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有CC1101的引腳圖、接線(xiàn)圖、封裝手冊(cè)、中文資料、英文資料,CC1101真值表,
    發(fā)表于 11-02 19:33
    <b class='flag-5'>CC1101</b> <b class='flag-5'>低功耗</b>(低于 1GHz)射頻收發(fā)器

    無(wú)線(xiàn)芯片CC1100和CC1101的區(qū)別 淺談CC1101芯片的特點(diǎn)

    CC1101 [1] 是一款低于1GHz設(shè)計(jì)旨在用于極低功耗RF應(yīng)用。其主要針對(duì)工業(yè)、科研和醫(yī)療(ISM)以及短距離無(wú)線(xiàn)通信設(shè)備(SRD)。
    發(fā)表于 09-06 09:43 ?1w次閱讀

    CC1101工作原理 基于與STM32CC1101接口移植

    CC1101 [1] 是一款低于1GHz設(shè)計(jì)旨在用于極低功耗RF應(yīng)用。其主要針對(duì)工業(yè)、科研和醫(yī)療(ISM)以及短距離無(wú)線(xiàn)通信設(shè)備(SRD)。
    的頭像 發(fā)表于 09-06 14:45 ?2.1w次閱讀
    <b class='flag-5'>CC1101</b>工作原理 基于與<b class='flag-5'>STM32</b>的<b class='flag-5'>CC1101</b>接口移植

    淺談CC1101驅(qū)動(dòng)在STM32F103的移植

    最后,TI驅(qū)動(dòng)里提供的是輪詢(xún)的方式收發(fā)數(shù)據(jù),對(duì)于初期來(lái)說(shuō),首先需要實(shí)現(xiàn)CC1101的工作,編譯調(diào)試移植到STM32上的CC1101驅(qū)動(dòng)代碼,看見(jiàn)數(shù)據(jù)
    的頭像 發(fā)表于 09-06 15:18 ?7814次閱讀
    <b class='flag-5'>淺談</b><b class='flag-5'>CC1101</b>驅(qū)動(dòng)在<b class='flag-5'>STM32</b>F103的移植

    cc1101低功耗設(shè)計(jì)方案 CC1101收發(fā)驅(qū)動(dòng)程序

    CC1101是一款低于1GHz設(shè)計(jì)旨在用于極低功耗RF應(yīng)用。其主要針對(duì)工業(yè)、科研和醫(yī)療(ISM)以及短距離無(wú)線(xiàn)通信設(shè)備(SRD)。
    發(fā)表于 09-06 15:30 ?5261次閱讀

    cc1101無(wú)線(xiàn)模塊

    CC1101無(wú)線(xiàn)模塊是采用TI公司的CC1101芯片制作的模塊,一般是工作在433M。長(zhǎng)沙云寶電子科技有限公司的生產(chǎn)的CC1101無(wú)線(xiàn)模塊比
    的頭像 發(fā)表于 03-09 12:42 ?2599次閱讀
    <b class='flag-5'>cc1101</b><b class='flag-5'>無(wú)線(xiàn)</b>模塊

    無(wú)線(xiàn)射頻芯片CC1101的特點(diǎn)和區(qū)別

    本文主要是關(guān)于無(wú)線(xiàn)芯片CC1100和CC1101的相關(guān)介紹,并著重對(duì)無(wú)線(xiàn)芯片CC1100和CC1101
    發(fā)表于 03-09 12:44 ?1411次閱讀

    無(wú)線(xiàn)射頻芯片CC1101的特點(diǎn)和區(qū)別

    本文主要是關(guān)于無(wú)線(xiàn)芯片CC1100和CC1101的相關(guān)介紹,并著重對(duì)無(wú)線(xiàn)芯片CC1100和CC1101
    的頭像 發(fā)表于 03-09 18:28 ?2302次閱讀

    【芯選擇】CC1101芯片的模塊實(shí)例

    CC1101芯片CC1101是一款低于1GHz設(shè)計(jì)旨在用于極低功耗RF應(yīng)用。其主要針對(duì)工業(yè)、科研和醫(yī)療(ISM)以及短距離無(wú)線(xiàn)通信設(shè)備(SRD)。C
    的頭像 發(fā)表于 12-02 09:51 ?1378次閱讀
    【芯選擇】<b class='flag-5'>CC1101</b>芯片的模塊實(shí)例
    RM新时代网站-首页