OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6388|回复: 6

STM32F103VET6问题,AD采集问题

[复制链接]

2

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-9-29
在线时间
2 小时
发表于 2020-9-29 15:38:52 | 显示全部楼层 |阅读模式
1金钱
问题1:我使用PD2、PD3和PD4 ,用作普通IO口控制继电器开关的,结果PD2 可以控制,PD3和PD4不行,是什么问题啊//GPIO初始化
void IO_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_Configuration();
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//开总线时钟
        //输入初始化
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2,GPIO_Pin_3,GPIO_Pin_4;                                      //
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOD, &GPIO_InitStructure);       
}

问题2 :PC0, PC1,PC2,PC3,AD信号采集,我设置的有什么问题呢,采集没有数据
void  Adc_Init(void)
{   
        //先初始化IO口
        RCC->APB2ENR|=1<<4;    //使能PORTC口时钟
        GPIOC->CRL&=0XFFFF0000;//PC0,PC1,PC2,PC3输入       
        //通道10/11/12设置                         
        RCC->APB2ENR|=1<<9;    //ADC1时钟使能          
        RCC->APB2RSTR|=1<<9;   //ADC1复位
        RCC->APB2RSTR&=~(1<<9);//复位结束            
        RCC->CFGR&=~(3<<14);   //分频因子清零       
        //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!
        //否则将导致ADC准确度下降!
        RCC->CFGR|=3<<14;               
        ADC1->CR1&=0XF0FFFF; //工作模式清零
        ADC1->CR1|=0<<16;      //独立工作模式  
        ADC1->CR1&=~(1<<8);    //非扫描模式          
        ADC1->CR2&=~(1<<1);    //单次转换模式
        ADC1->CR2&=~(7<<17);          
        ADC1->CR2|=7<<17;             //软件控制转换  
        ADC1->CR2|=1<<20;   //不使用用外部触发(SWSTART)!!!        必须使用一个事件来触发
        //ADC1->CR2&=~(1<<20);
        ADC1->CR2&=~(1<<11);   //右对齐         
        //ADC1->CR2|=1<<23;      //使能温度传感器
        ADC1->SQR1&=~(0XF<<20);
        ADC1->SQR1|=0<<20;     //1个转换在规则序列中 也就是只转换规则序列1                           
        //设置通道10的采样时间
        ADC1->SMPR1&=~(7<<0);  //通道10采样时间清空          
        ADC1->SMPR1|=7<<0;     //通道10 239.5周期,提高采样时间可以提高精确度         
        ADC1->SMPR1&=~(7<<3);  //通道11采样时间清空          
        ADC1->SMPR1|=7<<3;     //通道11 239.5周期,提高采样时间可以提高精确度         
        ADC1->SMPR1&=~(7<<6);  //通道12采样时间清空          
        ADC1->SMPR1|=7<<6;     //通道12 239.5周期,提高采样时间可以提高精确度
        ADC1->SMPR1&=~(7<<9);  //通道12采样时间清空          
        ADC1->SMPR1|=7<<9;     //通道12 239.5周期,提高采样时间可以提高精确度
       
        ADC1->CR2|=1<<0;             //开启AD转换器         
        ADC1->CR2|=1<<3;       //使能复位校准  
        while(ADC1->CR2&1<<3); //等待校准结束                          
    //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。                  
        ADC1->CR2|=1<<2;        //开启AD校准          
        while(ADC1->CR2&1<<2);  //等待校准结束
        //该位由软件设置以开始校准,并在校准结束时由硬件清除  
}                                  
//获得ADC值
//ch:通道值 0~16
//返回值:转换结果
u16 Get_Adc(u8 ch)   
{
        //设置转换序列                           
        ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch
        ADC1->SQR3|=ch;                                              
        ADC1->CR2|=1<<22;       //启动规则转换通道
        while(!(ADC1->SR&1<<1));//等待转换结束                   
        return ADC1->DR;                //返回adc值       
}
//获取通道ch的转换值,取times次,然后平均
//ch:通道编号
//times:获取次数
//返回值:通道ch的times次转换结果平均值
u16 Get_Adc_Average(u8 ch,u8 times)
{
        u32 temp_val=0;
        u8 t;
        for(t=0;t<times;t++)
        {
                temp_val+=Get_Adc(ch);
                Delayms(5);
        }
        return temp_val/times;
}

求大神解答,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-9-29
在线时间
2 小时
 楼主| 发表于 2020-9-29 15:40:35 | 显示全部楼层
哪里有问题能给我指出来吗,非常感谢
回复

使用道具 举报

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
发表于 2020-9-30 19:38:16 | 显示全部楼层
第一个问题 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2,GPIO_Pin_3,GPIO_Pin_4;的“,”改成“|”试试
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-9-29
在线时间
2 小时
 楼主| 发表于 2020-10-2 13:48:58 | 显示全部楼层
二三五 发表于 2020-9-30 19:38
第一个问题 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2,GPIO_Pin_3,GPIO_Pin_4;的“,”改成“|”试试

请问第二个问题,您知道我哪里写错了吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-10-2 23:44:02 | 显示全部楼层
仿真找找问题,
回复

使用道具 举报

11

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1455
金钱
1455
注册时间
2020-6-18
在线时间
225 小时
发表于 2020-10-7 09:59:10 | 显示全部楼层
YukariZT 发表于 2020-10-2 13:48
请问第二个问题,您知道我哪里写错了吗

看不出来,你换其它引脚试试
回复

使用道具 举报

10

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2013-5-6
在线时间
3 小时
发表于 2021-4-28 11:50:02 | 显示全部楼层
stm32f103vet6现在价格多少?你们知道吗?据说要六,七十元了!涨疯了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 22:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表