芯片为stm32f103c8t6
程序用GPI0_B0作为ADC1输入口,用规则通道转换数据。通过设置ADON位触发ADC转换。
问题1:PB0引脚固定接在通道8,ADC1,2可以经过通道8测量数据。这样理解对不对
问题2:上图寄存器中的SWSTART位 与 ADON位的功能有点分不清楚
问题3:程序联机调试的时候,PB0无论接0伏还是3.3伏。ADC1数据寄存器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 ;开始转换规则通道,S数据右对齐
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 ;设置gpio b为模拟输入
LDR R1,=0X00
STR R1,[R0]
LDR R0,=GPIOC ;设置gpio c13为输出 (指示灯)
LDR R1,=0X00300000
STR R1,[R0,#0X4]
LDR R1,=0XFFFFFFFF ;打开 GPIO 13 LED
STR R1,[R0,#0X0C]
LDR R0,=AFIO ;设ADC1外部触发规则转换与TIM8_TRGO相连
LDR R1,=0X70000
STR R1,[R0,#4]
LDR R0,=ADC_1 ;数据右对齐 并且校准
LDR R1,=0X000E0804
STR R1,[R0,#8]
LDR R0,=ADC_1 ;通道8转换时间寄存器
LDR R1,=0X07000000
STR R1,[R0,#10]
LDR R0,=ADC_1
LDR R1,=0X08 ;规则通道 通道8第一个转换
STR R1,[R0,#34]
LDR R0,=ADC_1 ;数据右对齐 并且校准
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四字节对齐
END
|