OTP單片機(jī)因其價格低廉,、性能成熟在許多小家電中得以廣泛應(yīng)用,。硬件編程器" title="編程器">編程器通常是其開發(fā)過程中必不可少的設(shè)備,。本案是用于該類單片機(jī)的硬件編程器,可對該類單片機(jī)實(shí)現(xiàn)聯(lián)機(jī)編程和脫機(jī)編程;還可以測試該類單片機(jī)的工作頻率,、工作電壓等多項參數(shù),,一機(jī)多用。
1,、STM32F101R8主要特性
STM32F10x系列是ST公司推出的基于ARM最新架構(gòu)Cortex-M3內(nèi)核的MCU" title="MCU">MCU,。集成了存儲器、時鐘,、復(fù)位和電源管理電路,,DMA控制器,模數(shù)/數(shù)模轉(zhuǎn)換器,,快速IO口,,多功能定時器及各種通訊端口。具有多種低功耗模式,、在線調(diào)試端口,。該系列MCU引腳、外設(shè),、軟件具有高度兼容性,,能應(yīng)用到許多領(lǐng)域中。
本案選用了基本型器件STM32F101R8,。這顆器件的主要特性有:
ARM 32位Cortex-M3 CPU,,36MHz,單周期乘法和硬件除法器
64KB FLASH,,10KB SRAM
2.0~3.6V,,POR,PDR,,PVD
內(nèi)部8MHz,、40kHz RC振蕩器,PLL;外部4~16MHz晶體,,32kHz用于RTC和備份域
7通道DMA控制器
3個4通道通用定時器,,IC/OC/PWM
2個SPI口,最高18Mbis/s
2個I2C接口,,支持SMBus
3個USART,,支持ISO7816,LIN,,IrDA,,Modem
1個16通道12位ADC
低功耗模式:睡眠、停止、待機(jī)
SWD和JTAG在線調(diào)試
CRC計算,,96位唯一ID
51個IO口
小型LQFP64封裝
2,、編程器硬件設(shè)計
編程器通過串口或其它通訊口與配套工具軟件通訊,實(shí)現(xiàn)對芯片的聯(lián)機(jī)編程,。脫機(jī)時則通過按鍵控制對芯片的編程,。
編程器硬件框圖如圖1所示。

圖1 編程器硬件框圖
編程器產(chǎn)生芯片所需的工作和編程電壓,,并根據(jù)需要控制所有電壓的開啟和關(guān)閉,。同時,利用主控制器內(nèi)部多通道ADC檢測供電電壓和編程電壓,,一旦電壓發(fā)生異常即關(guān)斷系統(tǒng)。
指示燈編程器用主控制器高驅(qū)動能力口線直接控制指示燈的開關(guān),,指示編程器的各種工作狀態(tài),。
通過編程接口對OTP芯片編程,同時還供給芯片工作時鐘,,檢測芯片內(nèi)部振蕩器的頻率,。
STM32F101R8的應(yīng)用連接如圖2所示。

圖2 STM32F應(yīng)用連接圖
其中,,CLK提供OTP芯片工作時鐘;AD0 ~ AD4共5路電壓輸入,,用于檢測系統(tǒng)的工作電源和編程電壓;f1_TST和f2_TST則用于檢測OTP芯片的內(nèi)部振蕩器頻率。RXD,、TXD是編程器和上位機(jī)之間的通訊接口(UART),,SCL和SDA是STM32F10x" title="STM32F10x">STM32F10x和OTP芯片之間的通訊接口(I2C,亦可用SPI等),。
L1,、L2、L3連接到指示燈,,BEEP連接到蜂鳴器,,KEY連接到脫機(jī)編程按鍵。其余引腳控制編程電壓和編程接口的開關(guān),。
3,、編程器軟件設(shè)計
3.1 主流程
軟件主流程圖如圖3所示。

圖3 軟件主流程圖
主流程看起來非常簡單,,因為程序充分利用了STM32F10x強(qiáng)大的中斷能力,。
3.2 ADC、DMA和TIM的設(shè)計
在上圖的主循環(huán)中,,沒有對ADC的任何處理,,這是因為程序采用了定時啟動ADC、用DMA自動讀取ADC的采樣數(shù)據(jù)、并在DMA中斷中處理ADC數(shù)據(jù)的方法,。采用這種工作方式,,只需要在初始化過程中正確設(shè)置ADC、DMA和定時器即可,,其它都在相應(yīng)的ISR中完成,。
DMA1通道1連接到ADC,配置如下:外設(shè)基地址是ADC1的數(shù)據(jù)寄存器地址,,存儲器基地址是開辟的緩沖區(qū)首地址,,數(shù)據(jù)源是外設(shè),數(shù)據(jù)目的是緩沖區(qū),,緩沖區(qū)大小為5個單元,,外設(shè)地址不自動增量而存儲器地址則自動增量,數(shù)據(jù)均為半字,,循環(huán)模式,,高優(yōu)先級,傳輸完成產(chǎn)生中斷,。
ADC設(shè)置為掃描模式,,數(shù)據(jù)右對齊,軟件觸發(fā)轉(zhuǎn)換,,共5個通道,,最大采樣時間,且在開機(jī)復(fù)位后校準(zhǔn)一次,。
用TIM2 CH2控制ADC定時轉(zhuǎn)換,。定時器配置為計數(shù)時鐘1MHz,CH2為輸出比較模式,,定時中斷,。
每當(dāng)產(chǎn)生TIM2 CC2中斷,就啟動ADC1按既定順序?qū)λ型ǖ擂D(zhuǎn)換一次,,DMA則自動保存每個通道的轉(zhuǎn)換結(jié)果,。當(dāng)所有通道轉(zhuǎn)換完畢,DMA產(chǎn)生中斷,,在此中斷中處理數(shù)據(jù),。本案采用了如下方法:每3次數(shù)據(jù)中取中值,每8個中值再取平均值作為最后的轉(zhuǎn)換結(jié)果,,并據(jù)此判斷各電壓是否正常,。
3.3 用PWM方式產(chǎn)生OTP芯片的工作時鐘
本案編程器提供給OTP單片機(jī)的是2MHz的工作時鐘(其它頻率也可)。本案利用TIM的PWM功能輸出一個2MHz的方波,。
TIM4的計數(shù)時鐘為36MHz,,CH4設(shè)置為PWM1模式,。設(shè)置完成、啟動TIM4后無需其它代碼即可在相應(yīng)引腳上輸出時鐘信號,,并可控制其啟動和停止,。。
3.4 頻率檢測
本案采用主控制器內(nèi)部的SySTick產(chǎn)生1s中斷,,并配合另一個定時器計數(shù)OTP單片機(jī)的頻率輸出,。因為STM32F10x的工作主頻很高,因此可以很準(zhǔn)確地檢測OTP單片機(jī)的內(nèi)部振蕩頻率,。
程序設(shè)計時利用了ST提供的標(biāo)準(zhǔn)外設(shè)庫STM32F10x_StdPeriph_Lib_V3.3.0,。限于篇幅,具體代碼不詳述,。
4,、結(jié)語
本方案已在多種OTP單片機(jī)上測試,編程可靠,,測量準(zhǔn)確,,效果很好。