|
芯片為stm32f103c8t6
程序用GPI0_B0作為ADC1輸入口,用規(guī)則通道轉(zhuǎn)換數(shù)據(jù)。通過設(shè)置ADON位觸發(fā)ADC轉(zhuǎn)換。
問題1:PB0引腳固定接在通道8,ADC1,2可以經(jīng)過通道8測量數(shù)據(jù)。這樣理解對不對
問題2:上圖寄存器中的SWSTART位 與 ADON位的功能有點分不清楚
問題3:程序聯(lián)機(jī)調(diào)試的時候,PB0無論接0伏還是3.3伏。ADC1數(shù)據(jù)寄存器DR總是在0000到大概3FFF之間跑。以下是程
*************STM32F103C8T6*****************
GPIOC EQU 0X40011000 ;GPIO端口C基地址
RCC_CFGR EQU 0X40021004
RCC_APB2ENR EQU 0X40021018
GPIOB EQU 0X40010C00 ;GPIO端口B 基地址
ADC_1 EQU 0X40012400 ;ADC1 基地址
AFIO EQU 0X40010000 ;AFIO基地址
AREA ICODE,CODE
ENTRY
EXPORT __main
__main ;主程序
BL SET_BIOS
LOOP
BL DELAY
LDR R0,=ADC_1 ;開始轉(zhuǎn)換規(guī)則通道,S數(shù)據(jù)右對齊
LDR R1,=0X000E0801
STR R1,[R0,#8]
BL DELAY
B LOOP
SET_BIOS
PUSH {R0,R1,LR}
LDR R0,=RCC_APB2ENR ;使能ADC_1,GPIO_B,GPIO_C,AFIO
LDR R1,=0X0000021D
STR R1,[R0]
LDR R0,=RCC_CFGR ;ADC時鐘分頻
LDR R1,=0XC000
STR R1,[R0]
LDR R0,=GPIOB ;設(shè)置gpio b為模擬輸入
LDR R1,=0X00
STR R1,[R0]
LDR R0,=GPIOC ;設(shè)置gpio c13為輸出 (指示燈)
LDR R1,=0X00300000
STR R1,[R0,#0X4]
LDR R1,=0XFFFFFFFF ;打開 GPIO 13 LED
STR R1,[R0,#0X0C]
LDR R0,=AFIO ;設(shè)ADC1外部觸發(fā)規(guī)則轉(zhuǎn)換與TIM8_TRGO相連
LDR R1,=0X70000
STR R1,[R0,#4]
LDR R0,=ADC_1 ;數(shù)據(jù)右對齊 并且校準(zhǔn)
LDR R1,=0X000E0804
STR R1,[R0,#8]
LDR R0,=ADC_1 ;通道8轉(zhuǎn)換時間寄存器
LDR R1,=0X07000000
STR R1,[R0,#10]
LDR R0,=ADC_1
LDR R1,=0X08 ;規(guī)則通道 通道8第一個轉(zhuǎn)換
STR R1,[R0,#34]
LDR R0,=ADC_1 ;數(shù)據(jù)右對齊 并且校準(zhǔn)
LDR R1,=0X000E0804
LDR R1,[R0,#8]
POP {R0,R1,LR}
BX LR
DELAY
PUSH {R5,LR}
LDR R5,=0X00005003
DELAY1
SUB R5,#0X00000001
CMP R5,#0X00000000
BNE DELAY1
POP {R5,LR}
BX LR
ALIGN ;ALIGN四字節(jié)對齊
END
|
|