February 15th, 2014

Бальзам

DSC_8250_s

Пост-загадка, или бальзам на душу для противников SPL. Это не ошибка в SPL, а лишь пример того, как библиотека может способствовать ошибкам программиста. Вот такой код может приводить к неработоспособности порта PA5. Столкнулся на F4, но то же самое будет и на F1.


  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  DAC_InitTypeDef DAC_InitStructure;
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);


Порт PA5 ведет себя непредсказуемо (а он у меня используется как выход SCK SPI1). Если что-то поменять в совершенно не связанным с этим делом месте программы, начинает работать. Еще что-то поменять - перестает. А может быть еще хитрее: включаем питание устройства - порт сидит в нуле и ни на что не реагирует. Подаем "сброс" на процессор - порт начинает нормально работать. И это всегда повторяется. Если эту же функциональность фрагмента переписать без SPL, глюк исчезает. Каков механизм глюка?

Комментарии включены для всех.