最近做項目用到STM32F051的片子,遇到了兩個小坑。
我的一個項目,需要ADC采集。兩路ADC輸入通道。PA0-ADCIn0; PA1-ADCIn1.
一開始想使用最簡單的方式,單次轉換。第一次采In0, 第2次采集In1.
STM32F0 的ADC庫里面提供了ADC轉換的函數:如下:
ADC_StartOfConversion(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
AdcProValRig[AdcLoopId] =ADC_GetConversionValue(ADC1);
ADC_StopOfConversion(ADC1);
解釋:ADC_StartOfConversion 開始連續轉換,也可以配置為,不是連續轉換。在ADC初始化結構體中配置。
然后等待ADC轉換結束,然后讀取ADC的轉換結果(同時會自動清空EOC標識)。
然后停止轉換。
接下來采集In1 , 理所當然,在采集前配置ADC的通道指向In1.
ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_71_5Cycles);
但是設置完了之后,發現,根本沒有鳥用啊。 采集的數據還是 之前IN0的通道。WHAT???
最后去看了一下原函數:居然是或運算?。。?! 我的理解是,STM32 的ADC庫設計,讓你盡量使用規則或者注入模式去使用ADC。如下:
void ADC_ChannelConfig(ADC_TypeDef* ADCx, uint32_t ADC_Channel, uint32_t ADC_SampleTime)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_ADC_ALL_PERIPH(ADCx));
assert_param(IS_ADC_CHANNEL(ADC_Channel));
assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
/* Configure the ADC Channel */
ADCx->CHSELR |= (uint32_t)ADC_Channel;
/* Clear the Sampling time Selection bits */
tmpreg &= ~ADC_SMPR1_SMPR;
/* Set the ADC Sampling Time register */
tmpreg |= (uint32_t)ADC_SampleTime;
/* Configure the ADC Sample time register */
ADCx->SMPR = tmpreg ;
}
那就直接寫通道到寄存器吧:
ADC1->CHSELR = ADC_CHSELR_CHSEL1;
第2個小坑: 就是在向FLASH 寫入參數的時候,單片機會死機,后來找到問題了,在寫FLASH的時候,要關閉中斷??赡苁俏覍懭氲紽LASH的內容多,時間長,寫進入后,還要讀出來,校驗。而我的串口通訊,波特率時38400很快,讀寫FLASH期間,頻繁的進入中斷,導致死機。
上一篇:MDK V5.12 + ST-Link V2 + Win10 STM32開發環境搭建1
下一篇:stm32 實現串口中斷接收浮點型、整型數據
推薦閱讀
史海拾趣
隨著公司規模的擴大和產品線的豐富,Anderson Electronics Inc公司開始積極拓展市場。公司通過與各大電子產品零售商建立合作關系,將產品銷往全國各地。同時,公司還加大了品牌宣傳力度,通過廣告、展會等多種渠道提升品牌知名度和影響力。在市場拓展的過程中,公司始終堅持質量第一的原則,以優質的產品和服務贏得了客戶的信賴和支持。
Anderson Electronics Inc公司成立于電子行業的初期,創始人憑借對電子技術的深厚造詣和對市場需求的敏銳洞察,成功開發出了一款具有劃時代意義的電子產品。這款產品以其卓越的性能和穩定的品質迅速占領了市場,為公司贏得了良好的口碑和豐厚的利潤。在創業初期,公司注重技術創新和研發投入,不斷推出新產品,逐步在電子行業中嶄露頭角。
芯朋微電子成立于2005年,初期由一群來自中國華晶電子集團的專家組成。公司創立之初,就專注于電源管理芯片的研發。經過數年的技術積累,2008年,芯朋微電子成功研發出“700V單片MOS集成AC-DC電源芯片”系列,這一突破打破了進口芯片的壟斷,贏得了國內家電品牌廠商的認可,為公司在家電領域的快速發展奠定了基礎。
芯朋微電子成立于2005年,初期由一群來自中國華晶電子集團的專家組成。公司創立之初,就專注于電源管理芯片的研發。經過數年的技術積累,2008年,芯朋微電子成功研發出“700V單片MOS集成AC-DC電源芯片”系列,這一突破打破了進口芯片的壟斷,贏得了國內家電品牌廠商的認可,為公司在家電領域的快速發展奠定了基礎。
在市場推廣的過程中,Soneet注重品牌形象的建立。公司積極參加各類行業展會和技術交流會議,展示其最新技術和產品。同時,Soneet還通過媒體宣傳、社交媒體營銷等方式,提高品牌知名度和美譽度。這些努力使得Soneet在消費者心中樹立了良好的品牌形象。
在快速發展的過程中,Erocore意識到供應鏈管理的重要性。公司開始優化供應鏈流程,降低采購成本,提高生產效率。通過與供應商建立長期穩定的合作關系,Erocore在保證產品質量的同時,實現了成本的有效控制。這一舉措為公司在激烈的市場競爭中贏得了更多的優勢。
AD采集的數據在12232上顯示 ,看看我的源程序#include<reg52.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit led1=P2^3; //led端口定義sbit led2=P2^4;sbit led3=P2^5;s ...… 查看全部問答∨ |
|
現在公司準備做Win下的PCI設備的驅動, 以前從未接觸過這樣的項目, 老大讓我先收集資料, 請問我該補哪方面的鈣? 就是那種很普通的數據采集卡,AD轉換卡 硬件平臺:普通PC. 軟件平臺:win xp,2k ps: 我只做過dos+工控機平臺的板卡程序,,就是那種 ...… 查看全部問答∨ |
|
注冊表項[HKEY_LOCAL_MACHINE\SOFTWARE\Apps]下有許多子項,如何將它們一一讀出? 在WinCE上, 注冊表項 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Apps]下有許多子項, 如何將它們一一讀出?… 查看全部問答∨ |
|
我第一次接觸串口開發,很多不明白的地方。 現在手頭有一設備,類似讀卡器,是USB口的,裝完驅動后會生成一對應的COM口。 刷卡的時候,這個外界設備會向連著的主機程序發送一串ASCII字符,我該如何獲得這些數據呢? 我用超級終端鏈接這個COM口, ...… 查看全部問答∨ |
|
請教各位高手:比如我想令dsp上電后進入低功耗模式,當SCIRXA接收到信號后被喚醒。 相應代碼 SysCtrlRegs.LPMCR0.all=0x03; ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 將低功耗設計進行到底——評論、轉發贏大禮!
- 芯幣競拍:感恩教師節專場
- Keysight示波器主題月有獎系列活動之 注冊大獎天天抽 搶樓踩中亦有獎
- Microchip有獎直播:VectorBlox™ SDK 報名中
- 有獎直播|ADI 慣性MEMS應用那些事
- 借助 Microchip 生態系統中的 PIC® 和 AVR® 單片機開啟嵌入式到云端之旅 系列在線研討會
- 帶你零起點入門STM32(專為嵌入式應用而開發的內核)
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- EEWorld Datasheet 伴你同行!快來領取200芯積分福利啦~
- 泰克福袋:示伴功倍,萬能福袋派送中