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

Allregia

Свой
  • Постов

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

  • Посещение

Репутация

9 Обычный

Информация о Allregia

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

4 842 просмотра профиля
  1. STM32L1 ADC + DMA

    Рассматриваю тут исходники одного девайса, и есть вопросы. Чbп - STM32L151, используется два входа АЦП, преобразование складыват результаты в две переменные в прерывании СисТика. В начале, в main, запускается преобразование: vu16 ADCRes[2]; // ADC Results from DMA ......... MX_DMA_Init(); MX_ADC_Init(); HAL_ADC_Start_DMA(&hadc, (uint32_t *)ADCRes, 2); Затем в систике значения с АП накаппливаютсы в двух переменных и когда-=то=та потом исползуются. u32 ADC1Res=0, ADC2Res=0; // ADC integrators ... void HAL_SYSTICK_Callback(void){ ADC1Res +=ADCRes[0]; ADC2Res +=ADCRes[1]; HAL_ADC_Start(&hadc); // next convertion <<<<<<<<<<<<< (1) Иициализация DMA НЕ циклическая! hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV; hadc.Init.LowPowerAutoWait = ADC_AUTOWAIT_DISABLE; hadc.Init.LowPowerAutoPowerOff = ADC_AUTOPOWEROFF_DISABLE; hadc.Init.ChannelsBank = ADC_CHANNELS_BANK_A; hadc.Init.ContinuousConvMode = DISABLE; // <<<<<<<<<<<<<<<<<<<<<<< (2) hadc.Init.NbrOfConversion = 2; hadc.Init.DiscontinuousConvMode = ENABLE; hadc.Init.NbrOfDiscConversion = 2; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.DMAContinuousRequests = ENABLE; if (HAL_ADC_Init(&hadc) != HAL_OK) Собственно вопрос - "а что, так можно было?!"(с) То есть, почему в (1) стоит HAL_ADC_Start а не HAL_ADC_Start_DMA и как оно при этом работает ?! Почему HAL_ADC_Start запускает DMA? А если оно DMA не запускает, то как результат двух преобразований попадает в ADCRes[] ? --------------------------------------------- P.S. Если я комментирую (1) и в (2) меняю дизейбл на энейбл - все работает в циклическом режиме, но это тривиально. Читали бы в прерывании по концу DMA, перезапуская его там-же, это тоже было бы понятно. Но вот такое как там я что-то не понял.
  2. Номиналы резисторов рулят! Особенно R5 R6...
  3. Полезно будут также: "Радио - это очень просто" и "Телевидение - это очень просто", и пр., того-же автора. А если серьезно - аппноты производителей чипов, например. Онлановые вэб-бенчи, тип ТИшного для DC-DC, который при вводе данных выдаст кучу схем на раных микросхемах, с расчетами. Но чтения ХиХ,ТиШ и т.п. это не отменяет.
  4. "Змейку" запускали и на "Микро-80", из ж.Радио, за годы до РК86 и Спектрума. И это была в основном именно "железячники", но ведь кто-то из них ее написал...
  5. Чет дорого. У китайцев вдвое дешевле: https://www.buydisplay.com/tft-display/ips-tft-display?diagonal_size=282&interface=396&resolution=811 US$18.33 Buy 10 for US$17.89 each and save 2% Buy 30 for US$17.40 each and save 5% Buy 50 for US$16.93 each and save 8% Buy 100 for US$16.44 each and save 10% С тачскрином и его контроллероv: +$7.70
  6. После "xls-файлика", они сделали MicroXplorer , тогда еще небыло HAL, был SPL (впрочем, нынешние халовские LL - это практически и есть SPL), но Микроэксплорер с ним не работал и никакой кодогенерации не делал - он только ноги расставлял. И это было весьма удобно. Потом на него навесили хал и кодогенерацию, и обозвали получившееся "CubeMX". Если посмотреть в любом текстовом редакторе файл кубика (.ioc), то в нем до сих пор первая строка: "#MicroXplorer Configuration settings - do not modify". Что касается изначального вопроса топикстартера, то лично я кубом расставляю ноги, настраиваю периферию (причем не факт что я этими настройками потом воспользуюсь), настраиваю клоки. Затем: 1) генерю проект и компилирую его (чисто на всякий случай, чтобы знать что оно собралось). 2) в директории проекта создаю поддиректорию My_Application 3) в ней создаю файл my_application.c (ну и потом тут, и в других моих директориях будут остальные мои .c/.h) 4) в него копирую инклуды из main.c, и далее пишу: void SystemClock_Config(void); // это прототип функции из main.c //------------------- void My_App(void){ HAL_Init(); SystemClock_Config(); // дальше будет мой код. } [code] 5) В main.c дописываю 4 строки: [code] /* USER CODE BEGIN Includes */ void My_App(void); // 1 - это прототип моей функции из my_application.c <<<<<<<< /* USER CODE END Includes */ ... int main(void){ /* USER CODE BEGIN 1 */ MyApp(); // 2 - вызов моей функции <<<<<<<<<<<< #if 0 // 3 - закрываю все ихнее <<<<<<<<<<<< /* USER CODE END 1 */ далее все оставляю и потом: /* USER CODE BEGIN 3 */ } #endif // 4 - конец закрытой части <<<<<<<<<<<<< /* USER CODE END 3 */ } Все, я выключил все что нагенерил куб, вынес все свое в отдельную директорию. Далее я все файлы что нагенерил куб не трогаю, а их содержимым - ну, чем-то пользуюсь, чем-то нет, и тогда пишу свое. В такой системе я в любой момент могу перегенерить все кубом заново, и это не затронет ничего моего. Могу перенести все мое в другой проект, для другой платы или другого проца. Практика показала, что так удобно и достаточно оперативно. Особенно, если надо что-то быстро попробовать и ответить на вопрос "а что если?" или "как это сделать?" - тут неважно что программа не сильно оптимальная. Допустим мне надо попробовать какой-то чип, работающий по i2c, и с которым есть непонятни в документации - ну пофиг что калокуб при этом не совсем оптимально настроит какую-то переферию, которая будет исползоваться для проверок - не в ней же суть мероприятия.
  7. Удивительное совпадение - вчера звонит приятель, у него на Ф4 тоже уходит время, и именно на 1-2 мин. за час! После расследования, оказалось что он по недосмотру, LSE он включил , но RTC тактировал от LSI...
  8. STM23F4 - SD NAND

    Может. Я померял на текущей плате длины дорожек, мин. - 38мм, макс. - 45. Да и вообще, при 200кгц тактовой как-то не верится.
  9. STM23F4 - SD NAND

    Боже упаси! Мне только БГа не хватало, для полного счастья. LGA-8 там. Смотрел, там что-то начинает шевелиться, но быстро заканчивает. Пока отложил, мне в принципе там для конкретной задачи, скорости и с 1-м битов с головой хватает. В марте дедлайн с прототипом устойства, а работы еще полно. Может быть потом к этому вернусь, но сейчас жалко сейчас терять время на третьестепенную задачу, есть более важные.
  10. STM23F4 - SD NAND

    Ну, "немножко зависит", поскольку при малой длине разница в длинах проводников разных сигналов тоже небольшая. В любом случае - в других конструкциях, оно у меня на макетках работало даже когда разъем MicroSD похабно 10-сантиметровым МГТФом припаивал. Там про 52МГц для MMC, а тут оно на 0.2 МГц не хочет 😞
  11. STM23F4 - SD NAND

    Можно конечно, но обычно на таких частотах, да на расстоянии в пару сантиметров - дожно быть пофиг там задержки и волновое. На L467 вообще было сантиметров 5, и все работало. Я выше писал что понижал тактовую до нескольких сот килогерц, и при этом ничего не изменилось. Уж при такой-то частоте точноне до 1 должно "задержек и волнового".
  12. STM23F4 - SD NAND

    Где такое говорил?! Разумеется, именно он у меня и работает. Да. Собственно он не виснет а улетает в ошибку: hsd.Instance = SDIO; hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; hsd.Init.BusWide = SDIO_BUS_WIDE_4B;//SDIO_BUS_WIDE_1B; hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; hsd.Init.ClockDiv = 16;//0; if (HAL_SD_Init(&hsd) != HAL_OK) // <<<<<<< это проходит { Error_Handler(); } if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK) { Error_Handler(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<< вот сюда. } Завтра уже буду разбираться, если на дргуое не отвлекусь.
  13. STM23F4 - SD NAND

    Ну, настроено все на SDIO. Что-то там "не то" - попробовал вместо чипа обычную карточку поставить - тоже самое. В 1-битном работает прекрасно, и FatFs и MSD, включаю4-х битный - виснет. Дальше пока не разбирался, другим занят.
  14. STM23F4 - SD NAND

    ZDSD01GLGEAG.pdf По идее, ничем не долно отличаться. Ну кроме того, что это просто микросхема а не карточка в разъеме.
×
×
  • Создать...