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

Flexz

Свой
  • Постов

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

  • Посещение

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


  1. С точки зрения процессора работающий код ничем принципиально не отличается от бесконечного цикла. И дело именно в прерываниях, когда то же самое устройство опрашиваю программно по готовности, то DMA продолжает исправно работать.

    С точки зрения процессора бесконечный цикл это обращение исключительно к памяти команд, которое происходит в обход BusMatrix, т.е. точно никому не мешает. А прерывания отличаются от опроса разве что наличием сохранения/загрузки контекста, вот тут утверждать не буду, но предположу, что блочное сохранение регистров может быть burst-ом на шине.

  2. Понятно. Значит придется изучать не только регистры АЦП, но и структуру ADC_InitTypeDef, а также саму функцию инициализации.

    Можно поинтересоваться - зачем?

    Программа минимум - скопипастить инициализацию из семпла, вообще ничего изучать не надо. А если знать регистры - зачем вам структура и функция?

  3. Я уже спрашивал, может здесь кто объяснит - на фига они нужны? В чем глубокий смысл инициализировать структуру, а потому вызвать функцию, которая перепишет эту структуру в регистры? Почему сразу не инициализировать регистры?

    Coding convention такой, попытка сокрытия реализации. Не очень удачная правда.

    Ну и свою библиотеку для stm32 я писал ориентируясь на полноту и последовательность действий в ст-шных либах. Все-таки в некотором смысле документацию они дополняют, может даже заменяют.

  4. Ну дело ваше, конечно, но на вашем месте прежде чем делать что-то посложнее я бы разобрался с простым. А именно с работой с уартом, ибо в коде полная ахинея.

    Вот это:

      for(int i=0; i<8; i++)
      {
        if(USART_ReceiveData(USART1) != 0xFF)
        {
          result |= (1<<i);
        }
      }

    не считает 8 байт по уарту, а 8 раз считает одно и тоже значение из регистра DR, нафига оно вам 8 раз?

    Отправка данных выглядит примерно так (копипаст из семплов)

        USART_SendData(USARTy, data1);
        
        /* Loop until USARTy DR register is empty */ 
        while(USART_GetFlagStatus(USARTy, USART_FLAG_TXE) == RESET)
        {
        }

    соответсвенно прием:

     
        /* Loop until the USARTz Receive Data Register is not empty */
        while(USART_GetFlagStatus(USARTz, USART_FLAG_RXNE) == RESET)
        {
        }
    
        /* Store the received byte in RxBuffer */
        data2 = USART_ReceiveData(USARTz);

     

    PS: аппноут, кстати, почитал - интересно, не знал что с 1-wire можно работать через uart

  5. и что я там должен был увидеть чтобы меня осинило, записываем и читаем в\из DR, вы с аппноутом знакомы который указывал в ссылке, или работали с 1-wire по uart?

    не читал и не работал. Зато достаточно работал с уартом, что бы видеть что код у вас нерабочий. Перед тем как читать DR надо дождаться того что бы там что-то появилось, а перед тем как писать в него надо дождаться пока из него все будет отправлено (задержки у вас там именно за этим стоят, причем почему то не везде).

    Аппноуты это конечно здорово, но документацию на контроллер тоже читать надо.

  6. Программа решает одну или несколько задач связанных с неким тех-процессом, так? Вот и нарисуйте алгоритмы решения этих задач. А делать схему алгоритма всей программы вместе с GUI дело неблагодарное, все равно в таком монстре черт ногу сломит.

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

     

    PS а схемы алгоритмов заказчику вообще зачем? Часом не просто в архив положить? Если так, то все решается банальной отпиской - нарисовать что-то близкое к реальности и по госту, все довольны.

  7. Последнее предложение не осилил, вы к чему это вообще?

     

    типовая последовательность обработки прерывания -

    1. считать регистр статуса

    2. обработать статус(ы) (в данном случае считать DR)

    При этом ORE тоже сбросится. Это ошибка которую просто нужно обработать.

     

    ТС видимо только читает DR, не глядя на статус, вот прерывание и виснет.

  8. Насколько жесткие требования к потреблению в спящем режиме? и какой именно из stm32?

    Вообще в штатном Sleep-е останавливается ядро но периферия работает, может это вам подойдет, но сильной экономии не добиться, скажем 10мА против 70.

    Если цель - батарейное питание, то лучше смотреть в сторону stm32l151 у них заявлены уже микроамперы при активной периферии.

  9. У меня мыслей больше нету..

    Я там скосячил несколькими постами выше, неглядя скопипастил не то

    должно быть

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);

    а не

    RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE);

     

    Кстати, насчет новых МК, с f103 были преценденты - вроде рабочий код, а глючит, перепаиваем другой проц - работает. Толи непропай, толи проц битый, но было несколько раз.

  10. stm32f217zgt6, пользую отладочную плату от стартеркита, пока свои ждут комплектации.

    Еще один шальной комент у вас в коде заметил

     

    //SDIO_InitStructure2.SDIO_ClockDiv = 0x76;

     

    но, вроде бы и без него клок должен быть, хотя и слишком быстрый для инициализации

  11. Вообще-то да, на любую периферию клоки надо включать предварительно. F103 помнится вообще HardFault влетал, если начать настраивать что-то не включая клок.

    А примеры внимательнее читать надо :) (либо может они у вас старо-глючные)

     

    вот код деинита из сэмплов

    void SDIO_DeInit(void)
    {
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, ENABLE);
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_SDIO, DISABLE);
    }

    вкл-выкл что? резет, а не клоки. А перед деинитом вызывается SD_LowLevel_Init() который настраивает ноги и включает клок на SDIO:

    RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE);

     

    без этого не работает.

     

    У вас отладочная плата есть или только своя?

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