MasterElectric

Members
  • Content count

    337
  • Joined

  • Last visited

Community Reputation

48 Обычный

About MasterElectric

  • Rank
    Постоялец

Электроника

  • Стаж в электронике
    6-10 лет
  1. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    Мне тоже стало интересно будет время проверю.
  2. Инициализация UART1, не работает

    Ну как купите себе анализатор за 5 баксов и J-Link будет попроще. Регистр BRR приводили выше
  3. Инициализация UART1, не работает

    #define USART_APB1_BAUDRATE_CALC(xVal) ((uint32_t) APB1_CLK / xVal) #define USART_APB2_BAUDRATE_CALC(xVal) ((uint32_t) APB2_CLK / xVal) USART1->BRR = USART_APB2_BAUDRATE_CALC(19200);
  4. Инициализация UART1, не работает

    Чип то какой? И что показывает анализатор? Проблема с тактированием?
  5. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    Ок тогда дам еще один в BSRR можно просто писать он только для записи. Но я таки смысла так и не понял с этим DFF. Некоторые процессы в модулях происходят на тактовой частоте передачи данных, Например USART передает данные с задержкой в байт после разрешения передатчика лично с этим столкнулся.
  6. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    @john2103 В RM четко написано нельзя менять бит DFF при работаеющем модуле (SPE = 1).
  7. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    @john2103 Если есть время попробуй то что я предложил и покажите что там будет решение я вам дам. Сам занимаюсь SPI только на L0
  8. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    @john2103 В этом: SPI1->CR1 |= SPI_CR1_BIDIMODE; // --- BIDIMODE режим работы (1 - одна линия, 0 - две линии связи) SPI1->CR1 |= SPI_CR1_BIDIOE; // --- BIDIOE Этот бит в сочетании с битом BIDImode выбирает направление передачи в двунаправленном режиме // --- 0: Output disabled (receive-only mode) // --- 1: Output enabled (transmit-only mode) SPI1->CR1 &=~SPI_CR1_CRCEN; // --- Аппаратный расчет CRC включить // --- 0: расчет CRC отключен // --- 1: Расчет CRC включен SPI1->CR1 &= ~SPI_CR1_CRCNEXT; // --- Следующая передача данных будет завершаться CRC-кодом. // --- 0: Этап передачи данных // --- 1: Следующая передача завершится передачей RCR SPI1->CR1 &= ~SPI_CR1_DFF; // --- Формат кадра данных // --- 0: Размер кадра передачи 8 бит // --- 1: Размер кадра передачи 16 бит SPI1->CR1 &= ~SPI_CR1_RXONLY; // --- Этот бит совместно с BIDIMODE выбирает направление передачи в 2-х проводном (MISO и MISO) режиме. // --- 0: Full duplex — передача и прием // --- 1: Output disabled — только прием SPI1->CR1 |= SPI_CR1_SSM; // --- Программное управление ведомым устройством. Когда бит SSM установлен, сигнал NSS заменяется значением бита SSI. // --- 0: Программное управление ведомым отключено // --- 1: Программное управление ведомым включено SPI1->CR1 |= SPI_CR1_SSI; // --- Внутренний выбор ведомого. Этот бит работает только когда бит SSM установлен. Значение этого бита принудительно подается на NSS, а значение IO вывода NSS игнорируется. // --- 1: (Master) Заменяет значение на выводе NSS // --- 0; (Slave) SPI1->CR1 &= ~SPI_CR1_LSBFIRST;// --- Формат кадра // --- 0: MSB передается первым // --- 1: LSB передается первым SPI1->CR1 |= SPI_CR1_BR; // --- BR[2:0]: Выбор скорости передачи // 000: fPCLK/2 // 001: fPCLK/4 // 010: fPCLK/8 // 011: fPCLK/16 // 100: fPCLK/32 // 101: fPCLK/64 // 110: fPCLK/128 // 111: fPCLK/256 //#define SPI_CR1_BR_Pos (3U) //#define SPI_CR1_BR_Msk (0x7U << SPI_CR1_BR_Pos) /*!< 0x00000038 */ //#define SPI_CR1_BR SPI_CR1_BR_Msk /*!< BR[2:0] bits (Baud Rate Control) */ //#define SPI_CR1_BR_0 (0x1U << SPI_CR1_BR_Pos) /*!< 0x00000008 */ //#define SPI_CR1_BR_1 (0x2U << SPI_CR1_BR_Pos) /*!< 0x00000010 */ //#define SPI_CR1_BR_2 (0x4U << SPI_CR1_BR_Pos) /*!< 0x00000020 */ SPI1->CR1 |= SPI_CR1_MSTR; // --- Выбор режима работы SPI: Master/Slave // --- 0: Режим Slave (ведомый) // --- 1: Режим Master (ведущий) SPI1->CR1 &= ~SPI_CR1_CPOL; // --- Полярность тактового сигнала // --- 0: CK в 0 при простое // --- 1: CK в 1 при простое SPI1->CR1 &= ~SPI_CR1_CPHA; // --- Фаза тактового сигнала я такое вижу впервые... @MasterElectric Смотри как бы сделал я. Выдели ногу для тестового сигнала и момент когда ты переключаешь битность дерни ногой и посмотри потом что покажет ЛА.
  9. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    для того чтобы использовать прерывания в SPI нужно чтобы объем данных был существенным, а передавать 4 байта прерываниями нет смысла. А если передаем буфер зачем переключать битность? поток и так непрырывный при использовании прерываний.
  10. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    @john2103 Ок, тогда вопрос зачем переключать с 8 на 16 какая цель? @john2103Я ж и пишу посмотри NarodSream, последние уроки, там поток данных от мастера непрерывный, так как тебе и нужно реализовать. Говорят он сансей по МК в русском сегменте ютуба уроков уже больше сотни.
  11. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    Боже что за бред... Посмотрите вначале NarodSream у него как раз последние темы про SPI в 103C8. В уроках он все грамотно рассказывает, вначале посмотрите видео, поучитесь. И если ты так будешь писать на CMSIS, то мой тебе совет используй HAL.
  12. STM32F103 SPI!!! CMSIS + прерывание - 8bit - 16bit

    Потому-то нужно читать RM, а не в разных местах...
  13. Может оно реально такое и есть, что мультиметр показывает?
  14. STM32 для чайника

    Не совсем так, зависит от типа обращения к данным. Слово к 4, полуслово к 2, байты можно не выравнивать.
  15. STM32 для чайника

    Откуда проблемы если вы не выравнивали структуры к 1 байту? Это проделки кейла? Ну а то что М0 не умеет это понятно. А ну теперь ясно cu_counters = (vb_counter_unit*) &modbus_data[1]; вот это проблема