Jump to content
    

mitya1698

Свой
  • Posts

    146
  • Joined

  • Last visited

  • Days Won

    1

mitya1698 last won the day on December 4

mitya1698 had the most liked content!

Reputation

1 Обычный

About mitya1698

  • Rank
    Частый гость
    Частый гость
  • Birthday December 11

Информация

  • Город
    Array

Recent Profile Visitors

2,016 profile views
  1. А источник питания способен съесть, то что ему через диоды и резисторы придет?
  2. смотрите предыдущие цифры класса, с каждой цифрой идет уточнение, для плат это ширина. Код классификатора ЕСКД: 758721 Детали - тела вращения и (или) не тела вращения, кулачковые, карданные, с элементами зацепления, арматуры, санитарно-технические, разветвленные, пружинные, ручки, уплотнительные, отсчетные, пояснительные, маркировочные, защитные, посуды, оптические, электрорадиоэлектронные, крепежные / Крепежные, электрорадиоэлектронные, платы печатные / Платы печатные на жестком основании, платы микросхем, микрополосковые / Платы печатные на жестком основан. с контуром в плане прямолин. с печатанными проводниками, двустор. шир., мм / До 20 включ.
  3. По поводу SPI. Так получилось, что у меня на одном SPI микросхемы, у которых разная полярность защелкивания данных по SCLK Несколько микросхем я опрашивал на STM так: (с разными CS) while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); SPI2->CR1 &= ~SPI_CPOL_High; // sclk low GPIO_WriteBit (GPIOA, GPIO_Pin_6, Bit_RESET); // cs =0 SPI_I2S_SendData(SPI2, ch); while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); value = SPI_I2S_ReceiveData(SPI2) ; GPIO_WriteBit (GPIOA, GPIO_Pin_6, Bit_SET); // cs =1 А с другой полярностью так: while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); SPI2->CR1 |= SPI_CPOL_High; // sclk high SPI_I2S_SendData(SPI2, ch); while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); SPI_I2S_ReceiveData(SPI2); // данные не нужны, выкидываем GPIO_WriteBit (GPIOB, GPIO_Pin_4, Bit_SET); // stb =1 GPIO_WriteBit (GPIOB, GPIO_Pin_4, Bit_RESET); // stb =0 В итоге, пока не было записи уникальной микросхемы все работало, а после записи в неё данные ломались. Долго я бился с этим включая выключая SPI, даже выключал тактирование, ничего не помогало, в итоге решил не трогать вообще SPOL, а играть переключением CPHA сделал так Для одних while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); GPIO_WriteBit (GPIOA, GPIO_Pin_6, Bit_RESET); // CS = 0 SPI_I2S_SendData(SPI2, ch); while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); value = SPI_I2S_ReceiveData(SPI2); GPIO_WriteBit (GPIOA, GPIO_Pin_6, Bit_SET); // cs = 1 И для уникальной, она записывается редко, поэтому только для нее я сделал переключение режима и возврат по завершении. По рекомендации GD дергать CPHA надо при выключенном SPI: while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET); SPI2->CR1 &= ~0x40; // SPE = 0 spi off SPI2->CR1 &= ~SPI_CPHA_2Edge; // CPHA = 0 SPI2->CR1 |= 0x40; // SPE = 1 spi on while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI2, ch); while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); SPI_I2S_ReceiveData(SPI2); GPIO_WriteBit (GPIOB, GPIO_Pin_1, Bit_SET); // stb =1 GPIO_WriteBit (GPIOB, GPIO_Pin_1, Bit_RESET); // stb =0 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) != RESET); SPI2->CR1 &= ~0x40; // SPE = 0 spi off SPI2->CR1 |= SPI_CPHA_2Edge; // CPHA = 1 SPI2->CR1 |= 0x40; // SPE = 1 spi on Так заработало нормально, вдруг кому пригодится STM позволяет больше вольностей, чем GD, буду копать дальше.
  4. Да я этот мануал читал Этот пункт имеется ввиду?
  5. Да действительно, помогло. //====================================================================================== void init_TIM4_ENA (void) //====================================================================================== { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PB6, PB7 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12,TIM_ICPolarity_Falling, TIM_ICPolarity_Falling); TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); TIM_Cmd(TIM4, ENABLE); } Расширил инит и все поднялось. Запутало немного, что STM считает таймеры от 1 , а GD от нуля. Всем спасибо. Буду подправлять везде инит, успешно работающий на STM :) ADC, DAC, CAN поднялись без проблем. С SPI поднялся, но там непонятка с переключением полярности SCK после переключения возникает непонятный глюк. Решил переключением фронтов на MISO/MOSI. Позднее опишу подробнее.
  6. а сам таймер зачем инитить, он же в слейв, прескалер вроде как без нужды, регистр перезагрузки FFFF по умолчанию. В стм так работало прекрасно. Обнаружил нестыковку, в СТМ на PB6 PB7 таймер 4 а вот у ГД на них таймер 3 :() Переделал на 3, но не взлетело всеравно. Попробую приведенную выше инициализацию, отпишусь.
  7. Не слушается RET6 в 64ногом корпусе. Пытаюсь включить читалку энкодера на PB6 PB7 Использую обычную от стм инициализацию - в регистре счета ноль, ничего не считает. На основе stdperiphlib : //====================================================================================== void init_TIM4_ENA (void) //====================================================================================== { GPIO_InitTypeDef GPIO_InitStructure; // TIM4 ENA RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PB6, PB7 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12,TIM_ICPolarity_Falling, TIM_ICPolarity_Falling); TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); TIM_Cmd(TIM4, ENABLE); } У кого-нибудь получилось? Прочитал рефмануал на ГД , отличий не увидел по модулю декодера вроде.
  8. Финал истории, впаял в платы очередные микросхемы - все заработало сразу. Итого сначала была бракованная партия, следующие две - перемарк.
  9. Может после куба в исходном проекте что-то вносилось руками в секции, которые куб перетер, или библиотеки изменились. Брать исходный проект , получившийся и натравить на них программу типа winmerge
  10. А толку, если из 166 регистра читается RLL С правильной, как и положено, читается MLL Явный перемарк.
  11. по пдфке сделан формирователь сброса, и опять же как свитч она работает. И по SMI отвечает. Будем пытаться купить еще MLLек.
  12. да, MIIM там стандартный, его STM нормально рулит А вот SMI только ногодрыгом.
  13. А можете прислать, какие регистры чем инициализируете? Нододрыг сделаем, это не сложно.
×
×
  • Create New...