dzgcsj_hz

    1. stm32之奇葩adc 21/4207 stm32/stm8 2014-01-02
      ltbytyn 发表于 2013-12-31 15:59 在连续转换模式下,你如何保证读取AD结果时当前AD刚好转换完成,还没有启动新一轮转换。如果在AD采样过程中 ...
      但是我先查询了EOC标志,while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);这样不能保证转换已经完成了吗?
    2. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-31
      ltbytyn 发表于 2013-12-30 20:31 抱歉,那一块我看错了。 下一次的ADC采样,你在什么地方启动了?
      ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;连续转换的
    3. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-30
      ltbytyn 发表于 2013-12-29 22:49 void disp_adc2(u16 d) {     float temp = d*3.3/4096;
      我是每发送一个字符才等待的,一次电压值发送完成之后,怎么会停留在while里呢?
    4. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-30
      ddllxxrr 发表于 2013-12-29 22:20 这句总是得取整数部分,并且还是CHAR,言外之意,就是基本上值 不变
      temp取值范围在0到3.3之间 ,乘以10之后转换成char,s范围是0到33,怎么会不变你?
    5. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-29
      ddllxxrr 发表于 2013-12-29 04:04 float temp = d*3.3/4096;         unsigned char s = (unsigned char)(temp * 10); 我觉得问题在这里, ...
      这段代码是把数字量换算成电压值,并精确到小数点后一位。你认为问题在哪里?
    6. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-28
      正点原子V1.5
    7. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-28
      应该是串口的问题,但是不知道哪里出了问题。
    8. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-28
      主函数文件 #include "stm32f10x.h" #include "adc.h" const unsigned char table[10] = {'0','1','2','3','4','5','6','7','8','9'}; // 软件延时 void Delay(__IO u32 nCount) {   for(; nCount != 0; nCount--); } void USART_GPIO_CONFIG() {         GPIO_InitTypeDef GPIO_InitStructure;                 //SystemInit();         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         GPIO_Init(GPIOA, &GPIO_InitStructure);         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;         GPIO_Init(GPIOA, &GPIO_InitStructure); } void USART_MODE_CONFIG() {     USART_InitTypeDef USART_InitStructure;         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);         USART_StructInit(&USART_InitStructure);         USART_InitStructure.USART_BaudRate = 115200;         USART_InitStructure.USART_WordLength = USART_WordLength_9b;         USART_InitStructure.USART_Parity = USART_Parity_Even;         USART_Init(USART1, &USART_InitStructure);         USART_Cmd(USART1, ENABLE);         //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);         //USART_ITConfig(USART1, USART_IT_TXE, ENABLE); } void disp_adc(u16 res) {         u8 wan, qian, bai, shi, ge;         wan = res / 10000;         qian = res %10000 /1000;         bai = res %1000 / 100;         shi = res %100 / 10;         ge = res %10;         USART_SendData(USART1 , table[wan]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , table[qian]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , table[bai]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , table[shi]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , table[ge]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , '\t');         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); } void disp_adc2(u16 d) {     float temp = d*3.3/4096;         unsigned char s = (unsigned char)(temp * 10);         USART_SendData(USART1 , table[s/10]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , '.');         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , table[s%10]);         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         USART_SendData(USART1 , '\t');         while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); } int main(void) {                u16 res;         /* config the sysclock to 72M */         SystemInit();   /* USART1 config */         USART_GPIO_CONFIG();         USART_MODE_CONFIG();         /* enable adc1 and config adc1 to dma mode */         ADC1_Init();         ADC_SoftwareStartConvCmd(ADC1, ENABLE);          while (1)   {                 while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);                 res = ADC_GetConversionValue(ADC1);                 disp_adc2(res);                 ADC_ClearFlag(ADC1, ADC_FLAG_EOC);     } }
    9. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-28
      adc.c代码 #include "adc.h" #define ADC1_DR_Address    ((u32)0x4001244C) __IO u16 ADC_ConvertedValue; /* * 函数名:ADC1_GPIO_Config * 描述  :使能ADC1和DMA1的时钟,初始化PB.01 * 输入  : 无 * 输出  :无 * 调用  :内部调用 */ static void ADC1_GPIO_Config(void) {         GPIO_InitTypeDef GPIO_InitStructure;         /* Enable ADC1 and GPIOC clock */         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   /* Configure PB.01  as analog input */   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   GPIO_Init(GPIOB, &GPIO_InitStructure);                                // PB1,输入时不用设置速率 } /* 函数名:ADC1_Mode_Config * 描述  :配置ADC1的工作模式为MDA模式 * 输入  : 无 * 输出  :无 * 调用  :内部调用 */ static void ADC1_Mode_Config(void) {         ADC_InitTypeDef ADC_InitStructure;           RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);   /* ADC1 configuration */   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;   ADC_InitStructure.ADC_ScanConvMode = DISABLE;   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;   ADC_InitStructure.ADC_NbrOfChannel = 1;   ADC_Init(ADC1, &ADC_InitStructure);   /* ADC1 regular channel11 configuration */   ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5);      /* Enable ADC1 */   ADC_Cmd(ADC1, ENABLE); //  ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);   /* Enable ADC1 reset calibaration register */      ADC_ResetCalibration(ADC1);   /* Check the end of ADC1 reset calibration register */   while(ADC_GetResetCalibrationStatus(ADC1));   /* Start ADC1 calibaration */   ADC_StartCalibration(ADC1);   /* Check the end of ADC1 calibration */   while(ADC_GetCalibrationStatus(ADC1));         /* Start ADC1 Software Conversion */ //  ADC_SoftwareStartConvCmd(ADC1, ENABLE); } /* * 函数名:ADC1_Init * 描述  :无 * 输入  :无 * 输出  :无 * 调用  :外部调用 */ void ADC1_Init(void) {         ADC1_GPIO_Config();         ADC1_Mode_Config(); }
    10. stm32之奇葩adc 21/4207 stm32/stm8 2013-12-28
      我没有使用DMA,我是在while(1)中查询ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) ,等待ADC采集结束,然后打印。我刚刚调试了一下,每次采集的数据是正确的,打印也是对的,但是为什么全速运行的时候,串口就不更新了呢?
    11. 消费电子领域十大技术趋势 1057/124993 移动便携 2013-12-26
      开开眼界
    12. 因为我的板子上PA0接了上拉电阻,所以浮空输入没问题。EXTI_Line0,固件手册上是这么写的,而且编译也没报错

最近访客

< 1/1 >

统计信息

已有3人来访过

  • 芯积分:--
  • 好友:--
  • 主题:3
  • 回复:12

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言