ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[应用相关] 搞了一天都没搞通

[复制链接]
373|38
 楼主 | 2019-1-10 20:20 | 显示全部楼层 |阅读模式


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后情况一样,郁闷
 楼主 | 2019-1-10 20:23 | 显示全部楼层
ADC1_SCHMITTTRIG_ALL, ENABLE改成DISABLE

使用特权

评论回复
| 2019-1-10 20:24 | 显示全部楼层
买的核心板,有参考例程的,参考他们的好了

使用特权

评论回复
| 2019-1-10 22:34 | 显示全部楼层
你先调个IO的LED闪烁

使用特权

评论回复
| 2019-1-10 22:35 | 显示全部楼层
要确保烧录程序是没问题的,才好继续学习,而点灯是最有说服力的。

使用特权

评论回复
| 2019-1-11 15:18 | 显示全部楼层
淘宝的板子是需要先确认下板子是没问题的。

使用特权

评论回复
| 2019-1-11 22:45 | 显示全部楼层
是不是复用功能时钟没有打开 RCC_APB2Periph_AFIO

使用特权

评论回复
| 2019-1-11 22:46 | 显示全部楼层
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);

使用特权

评论回复
| 2019-1-11 22:46 | 显示全部楼层
https://blog.csdn.net/ggggyj/article/details/84318881

使用特权

评论回复
| 2019-1-11 22:46 | 显示全部楼层
楼主不要一下子调试这么多功能

使用特权

评论回复
| 2019-1-11 22:46 | 显示全部楼层
改成TIM2触发,然后再加上UART

使用特权

评论回复
| 2019-1-11 22:47 | 显示全部楼层
                stm32f103中文参考手册

使用特权

评论回复
| 2019-1-11 22:47 | 显示全部楼层
记录一下STM32的ADC编程方法

使用特权

评论回复
| 2019-1-11 22:47 | 显示全部楼层
这个有什么提示吗?     

使用特权

评论回复
| 2019-1-11 22:48 | 显示全部楼层
是什么芯片呢?        

使用特权

评论回复
| 2019-1-11 22:48 | 显示全部楼层
是不是没有配置完整呢?

使用特权

评论回复
| 2019-1-11 22:48 | 显示全部楼层
官网的代码可以使用的。   

使用特权

评论回复
| 2019-1-11 22:48 | 显示全部楼层
建议参考一下ST的官方例程。

使用特权

评论回复
| 2019-1-11 22:48 | 显示全部楼层
如何使用DMA去减小CPU的负担

使用特权

评论回复
| 2019-1-11 22:48 | 显示全部楼层
给你一个正确的ADC例子

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表