#include "stm32_conf.h"
#define CFGR_BYTE4_ADDRESS ((u32 )0x40021007)
#define ADC1_DR_Address ((u32)0x4001284C)
#define RCC_APB2Periph_ADC1 ((u32)0x00000200)
extern u16 ADC_ConvertedValue[9];
//u16 ADC_ConvertedValue[9]={0,0,0,0,0,0,0,0,0};
/*************************************************
函数: void RCC_Config(void)
功能: 配置系统时钟
参数: 无
返回: 无
**************************************************/
void RCC_Configuration(void)
{
RCC_CR |= (u32)(1<<16); //外部HSE振荡器开启
RCC_CR &= ~(u32)(1<<0);//内部8MHz时钟关闭
RCC_CFGR &=(u32)(0x00000000); //
RCC_CFGR |=(u32)(5<<18)|(0<<17)|(1<<16)|(2<<2)|(2<<0);//
//时钟配置寄存器(7*8MHZ)|(HSE不分频)|(HSE时钟作为PLL输入时钟)|(PLL输出作为系统时钟)
RCC_CFGR |=(u32)(4<<8); //APB1 28MHz
RCC_CFGR|=(u32)(7<<24); //MCO 系统时钟(PLL)输出
RCC_CFGR |=(u32)(1<<14); //PCLK2 4分频后作为ADC时钟 14MHZ
RCC_CR |=(u32)(1<<24); //PLL使能
RCC_CIR|=(u32)(0x00000000);//时钟中断寄存器
}
/*************************************************
函数: void USART_Configuration(void)
功能: 串口配置
参数: 无
返回: 无
**************************************************/
void USART_Configuration(void)
{
RCC_APB1RSTR |= (u32)(1<<19); //APB1 外设复位寄存器 usart4复位
RCC_APB1RSTR &= ~(u32)(1<<19);//关闭APB1 外设复位寄存器 usart4复位
RCC_APB1ENR |= (u32)(1<<19);//APB1 外设时钟使能寄存器 开启UART4时钟
UART4_CR1 |= (u32)(1<<13|0<<12);//USART模块使能 一个起始位,8个数据位,n个停止位
UART4_CR2 |= (u32)(0<<0); //1个停止位;
UART4_CR3 |= (u32)(0<<0); //选择半双工模式
UART4_BRR |= (u16)(0x01E6);//Budrad = 57600,APB1=28MHZ
UART4_CR1 |= (u32)(1<<3);//发送被使能。
//UART4_CR1 |= (u32)(1<<2);//接收被使能
}
/*************************************************
函数: void GPIO_Configuration(void)
功能: 端口锁定
参数: 无
返回: 无
**************************************************/
void GPIO_Configuration(void)
{
RCC_APB2ENR |= (u32)(1<<5)|(1<<4)|(1<<3)|(1<<2);//开启D,C,B,A端口时钟
GPIOA_CRH = (u32)0x0000000B;//GPIO高八位 15~8
GPIOA_CRL = (u32)0x00000000;//GPIO低八位 7 ~0
GPIOC_CRH = (u32)0x00000B00;//GPIO高八位 15~8复用功能推挽输出模式 输出模式,最大速度50MHz
GPIOC_CRL = (u32)0x00000000;//GPIO低八位 7 ~0
}
/*************************************************
函数: void ADC1_Config(void)
功能: ADC配置
参数: 无
返回: 无
**************************************************/
void ADC1_Configuration(void)
{
RCC_APB2ENR|=RCC_APB2Periph_ADC1; //ADC时钟开启
ADC1_CR1 =(u32)0; //ADC控制寄存器1
ADC1_CR1|=(u32)(0<<8); //取消扫描模式
//ADC1_CR1|=(u32)(14<<0); //模拟看门狗通道
//ADC1_CR1|=(u32)(8<<16); //慢速交替模式
//独立模式
ADC1_CR2=(u32)0; //ADC控制寄存器 2
ADC1_CR2|=(u32)(0<<11); //数据右对齐
ADC1_CR2|=(u32)(0<<1); //单次转换模式
ADC1_CR2|=(u32)(7<<17); //有软件控制转换
ADC1_CR2|=(u32)(1<<20); //使用外部触发信号启动转换
ADC1_SMPR1&=(u32)0x00ffffff;//所有通道采样时间55.5周期,通道10-17
ADC1_SMPR2&=(u32)0x3fffffff;//所有通道采样时间1.5周期,通道0-9
ADC1_SQR1&=(u32)0; //ADC规则序列寄存器1
ADC1_SQR1|=(u32)(2<<20); //规则通道序列长度3
ADC1_SQR2&=(u32)0; //ADC规则序列寄存器2
ADC1_SQR3&=(u32)0; //ADC规则序列寄存器3
ADC1_SQR3|=(u32)(15<<0);//规则序列中15通道第1个转换
ADC2_SQR3|=(u32)(13<<5);//规则序列中13通道第2个转换
ADC1_SQR3|=(u32)(12<<10);//规则序列中12通道第3个转换
//ADC1_SQR3|=(u32)(10<<15);//规则序列中6通道第4个转换
//ADC1_SQR3|=(u32)(7<<20);//规则序列中6通道第5个转换
//ADC1_SQR3|=(u32)(5<<25);//规则序列中6通道第6个转换
//ADC1_SQR2|=(u32)(14<<0);//规则序列中6通道第7个转换
//ADC1_SQR2|=(u32)(6<<5);//规则序列中6通道第8个转换
//ADC1_SQR2|=(u32)(11<<10);//规则序列中6通道第9个转换
//ADC1_CR2|=(u32)(1<<8);//使用DMA模式
ADC1_CR2|=(u32)(1<<0);//开启ADC转换
ADC1_CR2|=(u32)(1<<3);//初始化校准寄存器
while((ADC1_CR2&(u32)0x08)==1);//等待初始化校准寄存器完成
ADC1_CR2|=(u32)(1<<2);//开始校准
while((ADC1_CR2&(u32)0x04)==1);//等待准寄存器完成
//ADC1_CR2|=(u32)(1<<0);//开启ADC转换
//ADC1_CR2|=(u32)(1<<20);//开始转换规则通道
}
/*************************************************
函数: void ADC2_Config(void)
功能: ADC配置
参数: 无
返回: 无
**************************************************/
void ADC2_Configuration(void)
{
RCC_APB2ENR|=(u32)(1<<10);//ADC时钟开启
ADC2_CR1 =(u32)0;//ADC控制寄存器1
//ADC2_CR1|=(u32)(1<<8);//使用扫描模式
//ADC2_CR1|=(u32)(14<<0);//模拟看门狗通道
//ADC2_CR1|=(u32)(13<<1);
//ADC2_CR1|=(u32)(8<<16);//慢速交替模式
ADC2_CR2=(u32)0;//ADC控制寄存器 2
ADC2_CR2|=(u32)(0<<11);//数据右对齐
ADC2_CR2|=(u32)(0<<1);//单次转换模式
ADC2_CR2|=(u32)(7<<17);//有软件控制转换
//ADC2_CR2|=(u32)(1<<20);//使用外部触发信号启动转换
ADC2_SMPR1&=(u32)0x00ffffff;//所有通道采样时间55.5周期,通道10-17
ADC2_SMPR2&=(u32)0x3fffffff;//所有通道采样时间1.5周期,通道0-9
ADC2_SQR1&=(u32)0;//ADC规则序列寄存器1
ADC2_SQR1|=(u32)(2<<20);//规则通道序列长度3
ADC2_SQR2&=(u32)0;//ADC规则序列寄存器2
ADC2_SQR3&=(u32)0;//ADC规则序列寄存器3
//ADC2_SQR3|=(u32)(15<<0);//规则序列中6通道第1个转换
//ADC2_SQR3|=(u32)(13<<0);//规则序列中6通道第2个转换
//ADC2_SQR3|=(u32)(12<<0);//规则序列中6通道第3个转换
ADC2_SQR3|=(u32)(10<<0);//规则序列中10通道第1个转换
ADC2_SQR3|=(u32)(7<<5);//规则序列中7通道第2个转换
ADC2_SQR3|=(u32)(5<<10);//规则序列中5通道第3个转换
//ADC2_SQR2|=(u32)(14<<0);//规则序列中6通道第7个转换
//ADC2_SQR2|=(u32)(6<<5);//规则序列中6通道第8个转换
//ADC2_SQR2|=(u32)(11<<10);//规则序列中6通道第9个转换
//ADC2_CR2|=(u32)(1<<8);//使用DMA模式
ADC2_CR2|=(u32)(1<<0);//开启ADC转换
ADC2_CR2|=(u32)(1<<3);//初始化校准寄存器
while((ADC2_CR2&(u32)0x08)==1);//等待初始化校准寄存器完成
ADC2_CR2|=(u32)(1<<2);//开始校准
while((ADC2_CR2&(u32)0x04)==1);//等待准寄存器完成
//ADC1_CR2|=(u32)(1<<0);//开启ADC转换
//ADC1_CR2|=(u32)(1<<20);//开始转换规则通道
}
/*************************************************
函数: void ADC3_Config(void)
功能: ADC配置
参数: 无
返回: 无
**************************************************/
void ADC3_Configuration(void)
{
RCC_APB2ENR|=(u32)(1<<15);//ADC时钟开启
ADC3_CR1 =(u32)0;//ADC控制寄存器1
//ADC3_CR1|=(u32)(0<<8);//使用扫描模式
//ADC3_CR1|=(u32)(14<<0);//模拟看门狗通道
//ADC3_CR1|=(u32)(13<<1);
//ADC3_CR1|=(u32)(8<<16);//慢速交替模式
ADC3_CR2=(u32)0;//ADC控制寄存器 2
ADC3_CR2|=(u32)(0<<11);//数据右对齐
ADC3_CR2|=(u32)(0<<1);//单次转换模式
ADC3_CR2|=(u32)(7<<17);//有软件控制转换
//ADC3_CR2|=(u32)(1<<20);//使用外部触发信号启动转换
ADC3_SMPR1&=(u32)0x00ffffff;//所有通道采样时间55.5周期,通道10-17
ADC3_SMPR2&=(u32)0x3fffffff;//所有通道采样时间1.5周期,通道0-9
ADC3_SQR1&=(u32)0;//ADC规则序列寄存器1
ADC3_SQR1|=(u32)(0<<20);//规则通道序列长度9
ADC3_SQR2&=(u32)0;//ADC规则序列寄存器2
ADC3_SQR3&=(u32)0;//ADC规则序列寄存器3
//ADC3_SQR3|=(u32)(15<<0);//规则序列中6通道第1个转换
//ADC3_SQR3|=(u32)(13<<0);//规则序列中6通道第2个转换
ADC3_SQR3|=(u32)(12<<0);//规则序列中6通道第3个转换
//ADC2_SQR3|=(u32)(10<<15);//规则序列中6通道第4个转换
//ADC2_SQR3|=(u32)(7<<20);//规则序列中6通道第5个转换
//ADC2_SQR3|=(u32)(5<<25);//规则序列中6通道第6个转换
//ADC2_SQR2|=(u32)(14<<0);//规则序列中6通道第7个转换
//ADC2_SQR2|=(u32)(6<<5);//规则序列中6通道第8个转换
//ADC2_SQR2|=(u32)(11<<10);//规则序列中6通道第9个转换
//ADC2_CR2|=(u32)(1<<8);//使用DMA模式
ADC3_CR2|=(u32)(1<<0);//开启ADC转换
ADC3_CR2|=(u32)(1<<3);//初始化校准寄存器
while((ADC3_CR2&(u32)0x08)==1);//等待初始化校准寄存器完成
ADC3_CR2|=(u32)(1<<2);//开始校准
while((ADC3_CR2&(u32)0x04)==1);//等待准寄存器完成
//ADC1_CR2|=(u32)(1<<0);//开启ADC转换
//ADC1_CR2|=(u32)(1<<20);//开始转换规则通道
}
/*************************************************
函数: void DMA_Config(void)
功能: ADC配置
参数: 无
返回: 无
**************************************************/
void DMA_Configuration(void)
{
RCC_AHBENR|=(u3