Перейти к содержанию
    

firstvald

Свой
  • Постов

    1 005
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные firstvald


  1. On 2/19/2020 at 12:20 AM, AlexandrY said:

    Не 2-х, а 12-и месяцев. :pardon:
    Не хотите исправить ошибку? 

    как разрабатывавший несколько кардиографов- передатчиков, с 12 месяцами согласен полностью. с поправкой на то что разработчиков было трое и бюджет был ,  вам не понравится какой. и, ребята не понимают сложности предприятия вааащее.

  2. нашел решение просто тыком. несмотря на неправильность, нужно снять галочку debug->setting->debug->Download To Flash

    тогда программа будет заливаться во флешь и отлаживаться. такое парадоксальное поведение только для 103 процессора. для тех, что смотрел: L412  L476  эта галка должна быть выставлена.

  3. Ubat  получается так.jpg

    static void MX_ADC1_Init(void)
    {
    
      /* USER CODE BEGIN ADC1_Init 0 */
    
      /* USER CODE END ADC1_Init 0 */
    
      ADC_MultiModeTypeDef multimode = {0};
      ADC_ChannelConfTypeDef sConfig = {0};
    
      /* USER CODE BEGIN ADC1_Init 1 */
    
      /* USER CODE END ADC1_Init 1 */
      /**Common config 
      */
      hadc1.Instance = ADC1;
      hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
      hadc1.Init.Resolution = ADC_RESOLUTION_12B;
      hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
      hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
      hadc1.Init.LowPowerAutoWait = DISABLE;
      hadc1.Init.ContinuousConvMode = DISABLE;
      hadc1.Init.NbrOfConversion = 1;
      hadc1.Init.DiscontinuousConvMode = DISABLE;
      hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
      hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
      hadc1.Init.DMAContinuousRequests = DISABLE;
      hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
      hadc1.Init.OversamplingMode = DISABLE;
      if (HAL_ADC_Init(&hadc1) != HAL_OK)
      {
        Error_Handler();
      }
      /**Configure the ADC multi-mode 
      */
      multimode.Mode = ADC_MODE_INDEPENDENT;
      if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
      {
        Error_Handler();
      }
      /**Configure Regular Channel 
      */
      sConfig.Channel = ADC_CHANNEL_VBAT ;//ADC_CHANNEL_5     ;//ADC_CHANNEL_TEMPSENSOR;
      sConfig.Rank = ADC_REGULAR_RANK_1;
      sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;//ADC_SAMPLETIME_2CYCLES_5;
      sConfig.SingleDiff = ADC_SINGLE_ENDED;
      sConfig.OffsetNumber = ADC_OFFSET_NONE;
      sConfig.Offset = 0;
      if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
      {
        Error_Handler();
      }
      /* USER CODE BEGIN ADC1_Init 2 */
    
      /* USER CODE END ADC1_Init 2 */
    
    }

    я увеличил до максимума время выборки. стало получше и, в принципе, приемлимо /

    1 hour ago, firstvald said:

    делитель именно внутри и делит на 3. по крайней мере так написано

    16 3 32.jpg

     

    18 minutes ago, ViKo said:

    Ясно. У моего МК на 2.

    То есть, делитель разрешается автоматически, а запрещать, значит, вручную надо? Хе-хе.

    Может, у вас sampling time маловато? Не успевает набрать?

    в точку. уже попробовал. огромное спасибо за компанию!!!!

    :clapping:

    там помимо того, что делителем нужно управлять, нужно проследить: чтобы внутри кристалла не оказались подключенными резисторы, через которые можно заряжать батарею. это лежит в PWR->CR4  бит VBE.

  4. делитель на 3. питаются регистры. да я специально акцентировал что подключаю делитель к выводу vbat/   пример использования измерения напряжения с этого вывода так и не нашел. слежу чтобы от ножки отключились резисторы заряда батареи.

    ну. очень много времени угрохал. казалось что этот узел работает и просто надо разобраться. похоже, идея с реле или коммутатором с измерением обычным входом ацп гораааздо правильная.

    попробую полиномом прикрыть все эти стмовские косяки.

  5. да мне было удобно с pc3 3.3 подавать. но я мультиметром смотрю, что подавать. хотя, можно напрямую от питания подавать. я уже смотрел что непосредственно на ножку процессора приходит. вообще говоря ,  то, что там намерял ацп очень похоже на прямое напряжение на диоде. при этом какой то ток с ножки процессора не потребляется (на ножке спокойно регулируется от 0 до 33). и ни о каких 1/3 как в документации написано тоже говорить не получается. только если очень очень пофантазировать.

  6. кристалл L476/ по обычным входам читаю при 0 вольт  код 0 при 3. 3  в на входе  близкое к 0xfff. а вот попробовал почитать напряжение на vbat и получаю при 0 вольт код 0x25a, а при 3,3 вольтах 0x33a/ 

    до измерения поставил

    ADC1->CR|= ADC_CCR_VBATEN;//

     

    /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_USART2_UART_Init();
      MX_ADC1_Init();
      MX_RTC_Init();
      /* USER CODE BEGIN 2 */
    	GPIOC->ODR|=GPIO_PIN_2|GPIO_PIN_3;// 1
    	
    	ADC1->CR|= ADC_CCR_VBATEN;//â ATM32L476xx.h
      /* USER CODE END 2 */
    
    
    while (1)
      {
        /* USER CODE END WHILE */
        HAL_ADC_Start(&hadc1);
    		
       
    		GPIOC->ODR|=GPIO_PIN_8;// 1
    		
        HAL_ADC_PollForConversion(&hadc1, 100);// 21 mks
    		
        
    		GPIOC->ODR&=~GPIO_PIN_8;// 1
    		
        adcResult = HAL_ADC_GetValue(&hadc1);
    		in_mv=(pwr_mv*adcResult)/0xfff;
        //bat_mv=(pwr_mv*adcResult*3)/0xfff;
    		
        HAL_ADC_Stop(&hadc1);
        /* USER CODE BEGIN 3 */
      }
    
    
    static void MX_ADC1_Init(void)
    {
    
      /* USER CODE BEGIN ADC1_Init 0 */
    
      /* USER CODE END ADC1_Init 0 */
    
      ADC_MultiModeTypeDef multimode = {0};
      ADC_ChannelConfTypeDef sConfig = {0};
    
      /* USER CODE BEGIN ADC1_Init 1 */
    
      /* USER CODE END ADC1_Init 1 */
      /**Common config 
      */
      hadc1.Instance = ADC1;
      hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
      hadc1.Init.Resolution = ADC_RESOLUTION_12B;
      hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
      hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
      hadc1.Init.LowPowerAutoWait = DISABLE;
      hadc1.Init.ContinuousConvMode = DISABLE;
      hadc1.Init.NbrOfConversion = 1;
      hadc1.Init.DiscontinuousConvMode = DISABLE;
      hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
      hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
      hadc1.Init.DMAContinuousRequests = DISABLE;
      hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
      hadc1.Init.OversamplingMode = DISABLE;
      if (HAL_ADC_Init(&hadc1) != HAL_OK)
      {
        Error_Handler();
      }
      /**Configure the ADC multi-mode 
      */
      multimode.Mode = ADC_MODE_INDEPENDENT;
      if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
      {
        Error_Handler();
      }
      /**Configure Regular Channel 
      */
      sConfig.Channel = ADC_CHANNEL_VBAT ;//ADC_CHANNEL_5     ;//ADC_CHANNEL_TEMPSENSOR;
      sConfig.Rank = ADC_REGULAR_RANK_1;
      sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
      sConfig.SingleDiff = ADC_SINGLE_ENDED;
      sConfig.OffsetNumber = ADC_OFFSET_NONE;
      sConfig.Offset = 0;
      if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
      {
        Error_Handler();
      }
      /* USER CODE BEGIN ADC1_Init 2 */
    
      /* USER CODE END ADC1_Init 2 */
    
    }

    т е то что я вижу это разрешение 8 бит с каким то смещением нуля

  7. попробовал как будто у меня 100 процессор и с теми драйверами как у Arlleex . симулирует. но в железе нет точек останова.

     

     

    проект вот:

    https://yadi.sk/d/fvws_fyZHqPEvg

     

    буду играться вообще с пустым проектом

     

    спасибо огромное за потраченное время!

  8. 3.bmp

     

    галка стоит.  у меня было так и ничего не работало. я нашел вот это http://www.keil.com/support/docs/3726.htm    и поправил драйвер для симуляции. стало работать. а вот с железом пока никак.

  9. что то странное. посмотрел на другой машине другой кейл (у меня 517  там 473 и проект делал не я) симуляция 103  работает. а вот работа с железкой - нет. нет точек останова. хотя в железку грузится и на железке работает. а у кого- то работает отладка на железе со 103 процессором?

  10. НЕКОТОРАЯ ПОДВИЖКА.  На вкладке Options ->Debug нужно поставить вместо того, что там было: Dialog DLL = DARMSTM.DLL  и  Parametr= -pSTM32F103C8 .  вроде бы, появилась симуляция. по крайней мере, точки останова ставятся.

    А вот при аппаратной отладке, Dialog DLL = TARMSTM.dll  и  Parametr= -pSTM32F103C8  результат не поправил - точек останова и переменных в watch нет.

  11. 5 hours ago, HardEgor said:

    У меня такое лечилось убиванием файла .uvoptx

    А появлялось, если компилировал проект разными версиями Keil.

    попробовал - не-а.

     

     

    здесь была на форуме тема. кто то вспмнил что для 103 правил какой то инишник.  и еще на радиокоте был совет найти и заремарить строчку сгенеренную кубой. посмотрю и отпишу.  пока никак.  

  12. 2 hours ago, ViKo said:

    При симуляции нужно задать диапазон допустимых адресов. В том же Memory Map.

    Не понимаю, как не удалось поставить нужный Pack.

    диапазон не ставиться. я картинку пристегнул. пак то ставится но с сообщением о SVDS / тут была тема про эту ошибку и она касается  всех процессоров.

  13. 2 hours ago, Arlleex said:

    Во вкладке "Output" галочка напротив "Debug Information" стоит?

    Во вкладке "Debug" опции "Download Options" сняты?

    Debug Information   - да стоит

    Download Options  - а вот тут должны стоять обе галки, по крайней мере,  download to flash должна стоять

     

×
×
  • Создать...