初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2013-4-18
- 在线时间
- 0 小时
|
// ADC 初始化
void ADC1_init()
{
// RCC->APB2ENR |= 1<<2; // 使能PORTA 的时钟
// GPIOA->CRL &= 0XFFFFFF0F; // 将PA.1设置为模拟输入模式 因为ADC1 CH1 接在该端口上
RCC->APB2ENR |= 1<<9; // 使能ADC1 的时钟
RCC->APB2RSTR &= ~(1<<9); // 复位ADC1的时钟
RCC->CFGR |= 3<<14; // PCLK2 8分频后作为ADC1时钟 (即为72/8=9MHZ) 分频因子要确保小于 14MHZ
ADC1->CR1 |= 0<<5; // 禁止EOC中断
ADC1->CR1 |= 0<<6; // 禁止看门狗中断
ADC1->CR1 |= 0<<7; // 禁止JEOC 中断
ADC1->CR1 |= 0<<8; // 关闭扫描模式 因为只进行一路通道的 ADC1 转换 不用扫描其他的通道
ADC1->CR1 |= 0<<13; // 一个通道
ADC1->CR1 |= 0<<16; // 独立模式
ADC1->CR2 |= 1<<1; // 连续转换模式
ADC1->CR2 |= 1<<8; // 使用DMA模式
ADC1->CR2 |= 0<<11; // 数据右对齐
ADC1->CR2 |= 7<<17; // SWSTART 事件启动规则通道组转换
ADC1->CR2 |= 1<<20; // 规则通道的外部触发转换模式:使用外部事件启动转换
ADC1->SQR1 |= 0<<20; // 设置规则通道序列长度为 1
ADC1->SMPR2 |= 1<<0; // 通道0的采样时间为7.5个周期
ADC1->CR2 |= 1<<0; // 开启A/D 转换 只适用于规则通道
ADC1->CR2 |= 1<<3; // 复位校准
while(ADC1->CR2&(1<<3)); // 等待复位校准完成
ADC1->CR2 |= 1<<2; // A/D校准
while(ADC1->CR2&(1<<2)); // 等待AD校准完成
}
AD转换(DMA模式) 为什么将 红色部分注释掉还是能够 AD转换 甚至把 PA1 设置为推挽输出也能转换
|
|