打印
[应用相关]

搞了一天都没搞通

[复制链接]
961|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiajs|  楼主 | 2020-11-16 23:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC, AD, dc, ADC1, ST

void Init_ADC(void)
{
        GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
        ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, ENABLE);
ADC1_Cmd(ENABLE);
}
void main(void)
{
  FlagStatus flag_status;
                u16 u16_adc1_value;
                Init_UART2();
                Init_ADC();
/* Infinite loop */
  while (1)
  {
                //Send(0xf0);
                ADC1_StartConversion();
                do{
                        flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
                }
                while(flag_status == RESET); // SET or RESET
                    u16_adc1_value = ADC1_GetConversionValue();
                                ADC1_ClearFlag(ADC1_FLAG_EOC);
                                flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
                                UART2_sendhex((u16_adc1_value>>8));
                    UART2_sendhex((u16_adc1_value&0xff));
                    UART2_sendstr("\r\n");
  }
  
}
单片机买的淘宝stm8s105k4t6核心板,debug时u16_adc1_value的值,我用可调电源输入大于2.1v时就是1023,小于2.1v就是0。flag_status的值一直是128,ADC1_ClearFlag(ADC1_FLAG_EOC)语句之后还是128不变。ADC1_SCHMITTTRIG_ALL, ENABLE改成ENABLE后情况一样,郁闷

使用特权

评论回复
沙发
jiajs|  楼主 | 2020-11-16 23:30 | 只看该作者
ADC1_SCHMITTTRIG_ALL, ENABLE改成DISABLE

使用特权

评论回复
板凳
lium| | 2020-11-16 23:39 | 只看该作者
买的核心板,有参考例程的,参考他们的好了

使用特权

评论回复
地板
wangzsa| | 2020-11-16 23:46 | 只看该作者
你先调个IO的LED闪烁

使用特权

评论回复
5
zhanglli| | 2020-11-16 23:49 | 只看该作者
要确保烧录程序是没问题的,才好继续学习,而点灯是最有说服力的。

使用特权

评论回复
6
huanghuac| | 2020-11-16 23:52 | 只看该作者
淘宝的板子是需要先确认下板子是没问题的。

使用特权

评论回复
7
wenfen| | 2020-11-16 23:57 | 只看该作者
是不是复用功能时钟没有打开 RCC_APB2Periph_AFIO

使用特权

评论回复
8
chuxh| | 2020-11-17 20:02 | 只看该作者
GPIO_InitTypeDef GPIO_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;
    DMA_InitTypeDef DMA_InitStructure;

    // IO
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_ADC1, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // ADC
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                       //12MHz
    ADC_DeInit(ADC1);

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;            
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = Sum;
    ADC_Init(ADC1, &ADC_InitStructure);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1 , ADC_SampleTime_7Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2 , ADC_SampleTime_7Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3 , ADC_SampleTime_7Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 4 , ADC_SampleTime_7Cycles5);
    ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 5 , ADC_SampleTime_28Cycles5);   // оƬζÈ
    ADC_TempSensorVrefintCmd(ENABLE);                                               // ζÈʹÄÜ

    ADC_DMACmd(ADC1, ENABLE);                                                    //ADC DMA Enable

    ADC_Cmd(ADC1, ENABLE);

    ADC_ResetCalibration(ADC1);

    while(ADC_GetResetCalibrationStatus(ADC1));

    ADC_StartCalibration(ADC1);

    while(ADC_GetCalibrationStatus(ADC1));
   
    // DMA
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);         
DMA_DeInit(DMA1_Channel1);         
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint)(&(ADC1->DR));
DMA_InitStructure.DMA_MemoryBaseAddr = (uint)DmaBuffer;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = Depth * Sum;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);              

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    DMA_Cmd(DMA1_Channel1, ENABLE);

使用特权

评论回复
9
pengf| | 2020-11-17 20:08 | 只看该作者
楼主不要一下子调试这么多功能

使用特权

评论回复
10
liuzaiy| | 2020-11-17 20:12 | 只看该作者
改成TIM2触发,然后再加上UART

使用特权

评论回复
11
ousj| | 2020-11-17 20:16 | 只看该作者
记录一下STM32的ADC编程方法

使用特权

评论回复
12
lium| | 2020-11-17 20:19 | 只看该作者

这个有什么提示吗?     

使用特权

评论回复
13
llia| | 2020-11-17 20:26 | 只看该作者
是什么芯片呢?        

使用特权

评论回复
14
wyjie| | 2020-11-17 20:33 | 只看该作者
是不是没有配置完整呢?

使用特权

评论回复
15
shimx| | 2020-11-17 20:37 | 只看该作者
官网的代码可以使用的。   

使用特权

评论回复
16
huwr| | 2020-11-17 20:40 | 只看该作者
建议参考一下ST的官方例程。

使用特权

评论回复
17
xxrs| | 2020-11-17 20:43 | 只看该作者
如何使用DMA去减小CPU的负担

使用特权

评论回复
18
chuxh| | 2020-11-17 20:47 | 只看该作者
给你一个正确的ADC例子

使用特权

评论回复
19
renyaq| | 2020-11-17 20:53 | 只看该作者
手册上才是最准确的。      

使用特权

评论回复
20
liuzaiy| | 2020-11-17 20:56 | 只看该作者
给你个AD转换例子

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

940

主题

11975

帖子

6

粉丝