Программирование МК STM32



Помечено: 

Просмотр 15 сообщений - с 136 по 150 (из 169 всего)
  • Автор
    Сообщения
  • #21728
    dionos
    Участник

    Доброго время суток. Помогите найти ошибку. Пытаюсь настроить ultrasonic us100 на stm32f103c8t6 на TIM4 CH1 на OnePulse Mode с последующем переключением на Input Capture Mode.

    RCC APB1 APB2 настроины на 48 Mhz

    Сброс настроек таймера и установка его на One pulse Mode:
    5 us пульс для запуска ultrasonic
    void TIM4_OnePulsModeInit()
    {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;

    TIM4->CR1 &= ~TIM_CR1_CEN;

    //Setup GPIO B6 as Alt func
    GPIOB->CRL &= ~(GPIO_CRL_CNF6 | GPIO_CRL_MODE6); // Reset GPIO State

    GPIOB->CRL |= GPIO_CRL_MODE6_0 | GPIO_CRL_MODE6_1 | GPIO_CRL_CNF6_1;
    GPIOB->CRL &= ~(GPIO_CRL_CNF6_0);

    //Init Timer 40 Hz
    TIM4->PSC = (uint32_t)((SystemCoreClock/1000000)-1); //48-1
    TIM4->ARR = 25000; // 0,025sec(period)
    CLEAR_REG(TIM4->CR1);
    CLEAR_REG(TIM4->CCER);
    CLEAR_REG(TIM4->EGR);
    CLEAR_REG(TIM4->CCMR1);

    TIM4->CR1 |= /*TIM_CR1_URS | */ TIM_CR1_OPM | TIM_CR1_ARPE; // Enable Update request source, One-pulse mode, Auto-reload preload enable
    TIM4->CCER |= TIM_CCER_CC1E; // Channel 1, CC1 channel configured as output
    TIM4->EGR |= TIM_EGR_UG; // Enable Update generation

    TIM4->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_2); //Enable Output compare 1 mode
    TIM4->CCMR1 |= (TIM_CCMR1_OC1PE); //Output compare 1 preload enable
    TIM4->CCR1 = 5000;
    TIM4->CR1 |= TIM_CR1_CEN;
    }

    Сбос настроек таймена и установка его на Input Capture Mode
    void Tim4_InputCaptureModeInit()
    {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;

    TIM4->CR1 &= ~TIM_CR1_CEN;

    //Setup GPIO B6 Input floating
    GPIOB->CRL &= ~(GPIO_CRL_CNF6 | GPIO_CRL_MODE6); // Reset GPIO State

    GPIOB->CRL |= GPIO_CRL_CNF6_0;
    //GPIOB->CRL &= ~(GPIO_CRL_CNF6_0);

    CLEAR_REG(TIM4->CR1);
    CLEAR_REG(TIM4->CCER);
    CLEAR_REG(TIM4->EGR);
    CLEAR_REG(TIM4->CCMR1);

    //Init Timer 40 Hz
    TIM4->PSC = (uint32_t)((SystemCoreClock/1000000)-1); //48-1
    TIM4->ARR = 25000; // 0,025sec(period)

    TIM4->CR1 |= TIM_CR1_URS;

    TIM4->CCMR1 |= TIM_CCMR1_CC1S_0; //CC1 channel is configured as input, IC1 is mapped on TI1
    TIM4->CCER |= TIM_CCER_CC1P; //1: inverted: capture is done on a falling edge of IC1
    TIM4->CCMR1 &= ~ TIM_CCMR1_IC1PSC;
    TIM4->CCER |= TIM_CCER_CC1E; //Enable capture from the counter into the capture register by setting the CC1E

    TIM4->CR1 |= TIM_CR1_CEN;
    }

    void main()
    {

    while(1)
    {
    TIM4_OnePulsModeInit();
    while((TIM4->SR & TIM_SR_UIF) != TIM_SR_UIF);
    TIM4->SR &= ~TIM_SR_UIF;

    Tim4_InputCaptureModeInit();
    while((TIM4->SR & TIM_SR_UIF) != TIM_SR_UIF);
    TIM4->SR &= ~TIM_SR_UIF;

    TIM4->SR &= ~TIM_SR_CC1IF;
    TIM4->SR &= ~TIM_SR_CC1OF;
    pulse = TIM4->CCR1;

    len = (uint32_t)((pulse * 331 / 2) / 1000);

    }
    }

    но pulse(TIM4->CCR1) переменная постоянно имеет значение 5000, которое было установлено в TIM4_OnePulsModeInit.

    #21807
    A-Soft
    Участник

    Уважаемый Админ, у меня 2 вопроса:
    1. Как удалить дубликат Вашей статьи, в котором я указан автором?

    STM Урок 206. LL. STM32F4. Светодиоды и кнопка


    2. Будут ли еще уроки по STM32 Assembler или больше не ждать?

    #21808
    Narod Stream
    Хранитель

    A-Soft, Здравствуйте!
    1. Удалил.
    2. Думаю, что будут, по крайней мере, у меня нереализованных проектов по данной теме много, в том числе и работа на аппаратном уровне с плавающей точкой, понятное дело, что уже в линейке M4.

    • Ответ изменён 3 года, 10 месяцев назад пользователем Narod Stream.
    #21812
    A-Soft
    Участник

    Здравствуйте, Narod Stream!
    Ну что ж, ждём продолжения.
    Хочу ВСЁ писать на ассемблере, а не только вставки в С/С++ код. Но пока много чего не понимаю.
    Недавно я стал работать с M4 — вообще «в ёлочку» будет.
    С Уважением, A-Soft.

    #21818
    OttoDietrich
    Участник

    Здравствуйте. У вас есть презентация вашей STM32H745I https://www.youtube.com/watch?v=pNPlW9wyo98

    Будут ли уроки связанные с ней ?

    #21887
    admira1
    Участник

    Здравствуйте, уже второй месяц пошел а я так и не продвинулся в написании программы, ethernet to uart. По порядку
    Приобрел для проекта отладочную плату nucleo h743zi2 на плате присутствует физика lan 8742.
    И начал писать программу, до этого с ethernet на stm32 не сталкивался.
    Проблема заключается в следующем. В H7 микроконтроллерах, нужно включить кэш данных и кэш инструкций, настроить MPU. Далее включил ethernet с протоколом общения физики и камня RMII, далее включаю lwip. Отключаю динамическую адресацию, вписываю настройки сетки. Ну и настраиваю все rcc и увиличиваю стэк и кучу и тд. Далее генерирую код, и настраиваю кейл, в кейле во вкладке опции для цели — цели снимаю галку на Iram1 оставляю галку Iram2(ЭТО КАК Я ПОНЯЛ НУЖНО ЧТОБЫ ETHERNET И DMA МОГЛИ ДРУЖИТЬ). Далее в main прописываю структуру gnetif и в бесконечном цикле делаю MX_process(), компилирую все это дело, пингую и ничего(заданый узел недоступен)(пробовал как в ваших видео тоже не работает). Далее проверяю есть ли подключение, (netif_is_up), вывел светодиодики(на плате user led) когда вытаскиваю кабель ehernet (все меняться светодиодик тухнет другой загорается), т.е. физику микроконтроллер видит. Не понимаю в чем может быть проблема, все делаю по инструкции написанной самим STM а оно не работает.

    2) закупил такой же комплект как у вас в уроках stm disko f407 и waveshare lan8720 все сделал по вашему уроку (помоему 89), и опять проверяем работу физики и мк, пробуем пингануть плату получаем (заданый узел недоступен).
    Кароче очень сильно устал перерыл весь интернет, помогите пожалуйста разобраться…

    #22003
    A-Soft
    Участник

    Здравствуйте, NarodStream!
    Очень интересен такой момент — как программировать STM32 на с++?
    А именно связка CubeMX -> Keil -> c++
    Как-то так чтобы потом можно было и в кубе редактировать.
    Надо не столько синтаксис c++, сколько сам рабочий проект (мигание светика) и как им пользоваться.

    #22173
    pvg_79
    Участник

    Люди как создать новую тему?
    Интересует I2C Slave на библиотеке HAL, у меня ничего не получается.

    #22174
    Oleg Nicolaiciuc
    Участник

    Всем привет!
    Извените если не в тему вопрос! Не решал ли кто нибудь задачу вывода изображения на TFT дисплей? Какой из стандартных графических форматов (*.pic, *.pcx, *.jpg, *.bmp …) наиболее просто преобразуется в линейную последовательность пикселей в условиях дефицита оперативной памяти. Может быть существуют какие либо библиотеки или кто нибудь может поделиться исходниками? Приветствуются любые идеи!

    #22247
    Ilfat
    Участник

    Здравствуйте не могу пропинговать контроллер(Stm32f7Discovery) когда запущена инициализация GUI, не подскажете в чем может быть проблема(без GUI_Init() пингуется)?

    #22252
    RedOrm
    Участник

    Пробую написать программу на STM32 используя HAL библиотеки. В программе инициализируются три таймера номер 3 (TIM3), номер 5 (TIM5), номер 2 (TIM2).

    TIM3 тактируется от внутреннего источника (от шины), работает в режиме ШИМ и формирует на выходе меандр с частотой 1,2 МГц.
    TIM5 тактируется от TIM3, работает в режиме ШИМ.
    TIM2 тактируется от TIM3, работает в режиме сравнения.

    Как хотелось бы чтобы работало:

    Таймеры запускаются одновременно. Разрешается прерывание по TIM2 по значению Pulse в STM32CubeMX. TIM2 отсчитывает интервал времени в течение которого TIM5 сформирует на выходе два импульса ШИМ с заданной частотой и заполнением. Когда TIM2 досчитывает до конца временного интервала (значение Pulse в STM32CubeMX), формируется прерывание.

    В обработчике прерывания меняется заполнение импульсов, которые формирует TIM5. Запрещается прерывание TIM2 по значению Pulse и разрешается прерывание TIM2 по переполнению.

    Далее таймеры продолжают считать. TIM5 формирует один импульс с измененным заполнением и возникает переполнение по переполнению TIM2.

    В обработчике прерывания меняется заполнение импульсов, которые формирует TIM5, на изначальное значение. Запрещается прерывание TIM2 по переполнению, разрешается прерывание TIM2 по значению Pulse.

    И так по кругу… TIM5 на выходе должен формировать последовательность импульсов: два с одинаковым заполнением, один с меньшим, опять два с одинаковым, опять один с меньшим и т.д.

    Написал такой код main.c:

    Обработка прерываний такая:

    Начинаю отлаживать. Пробую сначала работу без второго обработчика прерывания. Вижу следующую картину

    #22278
    Alojs82
    Участник

    Добрый день,
    Я программирую STM32 какое-то время. Пожалуйста, сделал ли кто-нибудь связь по протоколу MODBUS TCP / IP.
    Я хотел бы сделать преобразователь данных из STM32 (например, температуры и входов / выходов) в ПЛК Siemens.
    Это о том, как происходило общение в STM32.

    Я купил комплект DISCOVERY_F767ZI с портом Ethernet (LAN8742A-CZ-)

    Спасибо.

    #22279
    Chirila Constantin
    Участник

    Добрый день.

    Сайт Keil не работает, подскажите, пожалуйста, где найти инсталяцию MDK ARM STM 32 version 5, хщчу начать заниматься STM32, так занимаюсь AVR — ами.

    #22319
    diegoarmanda
    Участник

    Здравствуйте! Хотелось бы увидеть от вас уроки по настройке GPS с STM32

    #22325
    Vladimir4444
    Участник

    Есть силовая часть для BLDC в сборе на транзисторах gp10nc60kd и ir2106s
    Мотор на 100 вольт 2000 ватт BLDC на постоянных магнитах от стиральной машинки LG а так же, есть STM32F103. Помогите найти прошивку чтобы сделать контроллер.
    С моей стороны, посильная помощь. Очень прошу! Хочу запустить этот мотор для собственныз нужд. А знаний по программированию абсолютно ноль.

  • Автор
    Сообщения
  • #21728

    dionos
    Участник
    • Оффлайн

    Доброго время суток. Помогите найти ошибку. Пытаюсь настроить ultrasonic us100 на stm32f103c8t6 на TIM4 CH1 на OnePulse Mode с последующем переключением на Input Capture Mode.

    RCC APB1 APB2 настроины на 48 Mhz

    Сброс настроек таймера и установка его на One pulse Mode:
    5 us пульс для запуска ultrasonic
    void TIM4_OnePulsModeInit()
    {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;

    TIM4->CR1 &= ~TIM_CR1_CEN;

    //Setup GPIO B6 as Alt func
    GPIOB->CRL &= ~(GPIO_CRL_CNF6 | GPIO_CRL_MODE6); // Reset GPIO State

    GPIOB->CRL |= GPIO_CRL_MODE6_0 | GPIO_CRL_MODE6_1 | GPIO_CRL_CNF6_1;
    GPIOB->CRL &= ~(GPIO_CRL_CNF6_0);

    //Init Timer 40 Hz
    TIM4->PSC = (uint32_t)((SystemCoreClock/1000000)-1); //48-1
    TIM4->ARR = 25000; // 0,025sec(period)
    CLEAR_REG(TIM4->CR1);
    CLEAR_REG(TIM4->CCER);
    CLEAR_REG(TIM4->EGR);
    CLEAR_REG(TIM4->CCMR1);

    TIM4->CR1 |= /*TIM_CR1_URS | */ TIM_CR1_OPM | TIM_CR1_ARPE; // Enable Update request source, One-pulse mode, Auto-reload preload enable
    TIM4->CCER |= TIM_CCER_CC1E; // Channel 1, CC1 channel configured as output
    TIM4->EGR |= TIM_EGR_UG; // Enable Update generation

    TIM4->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_2); //Enable Output compare 1 mode
    TIM4->CCMR1 |= (TIM_CCMR1_OC1PE); //Output compare 1 preload enable
    TIM4->CCR1 = 5000;
    TIM4->CR1 |= TIM_CR1_CEN;
    }

    Сбос настроек таймена и установка его на Input Capture Mode
    void Tim4_InputCaptureModeInit()
    {
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;

    TIM4->CR1 &= ~TIM_CR1_CEN;

    //Setup GPIO B6 Input floating
    GPIOB->CRL &= ~(GPIO_CRL_CNF6 | GPIO_CRL_MODE6); // Reset GPIO State

    GPIOB->CRL |= GPIO_CRL_CNF6_0;
    //GPIOB->CRL &= ~(GPIO_CRL_CNF6_0);

    CLEAR_REG(TIM4->CR1);
    CLEAR_REG(TIM4->CCER);
    CLEAR_REG(TIM4->EGR);
    CLEAR_REG(TIM4->CCMR1);

    //Init Timer 40 Hz
    TIM4->PSC = (uint32_t)((SystemCoreClock/1000000)-1); //48-1
    TIM4->ARR = 25000; // 0,025sec(period)

    TIM4->CR1 |= TIM_CR1_URS;

    TIM4->CCMR1 |= TIM_CCMR1_CC1S_0; //CC1 channel is configured as input, IC1 is mapped on TI1
    TIM4->CCER |= TIM_CCER_CC1P; //1: inverted: capture is done on a falling edge of IC1
    TIM4->CCMR1 &= ~ TIM_CCMR1_IC1PSC;
    TIM4->CCER |= TIM_CCER_CC1E; //Enable capture from the counter into the capture register by setting the CC1E

    TIM4->CR1 |= TIM_CR1_CEN;
    }

    void main()
    {

    while(1)
    {
    TIM4_OnePulsModeInit();
    while((TIM4->SR & TIM_SR_UIF) != TIM_SR_UIF);
    TIM4->SR &= ~TIM_SR_UIF;

    Tim4_InputCaptureModeInit();
    while((TIM4->SR & TIM_SR_UIF) != TIM_SR_UIF);
    TIM4->SR &= ~TIM_SR_UIF;

    TIM4->SR &= ~TIM_SR_CC1IF;
    TIM4->SR &= ~TIM_SR_CC1OF;
    pulse = TIM4->CCR1;

    len = (uint32_t)((pulse * 331 / 2) / 1000);

    }
    }

    но pulse(TIM4->CCR1) переменная постоянно имеет значение 5000, которое было установлено в TIM4_OnePulsModeInit.

    #21807

    A-Soft
    Участник
    • Оффлайн

    Уважаемый Админ, у меня 2 вопроса:
    1. Как удалить дубликат Вашей статьи, в котором я указан автором?

    STM Урок 206. LL. STM32F4. Светодиоды и кнопка


    2. Будут ли еще уроки по STM32 Assembler или больше не ждать?

    #21808

    Narod Stream
    Хранитель
    • Оффлайн

    A-Soft, Здравствуйте!
    1. Удалил.
    2. Думаю, что будут, по крайней мере, у меня нереализованных проектов по данной теме много, в том числе и работа на аппаратном уровне с плавающей точкой, понятное дело, что уже в линейке M4.

    • Ответ изменён 3 года, 10 месяцев назад пользователем Narod Stream.
    #21812

    A-Soft
    Участник
    • Оффлайн

    Здравствуйте, Narod Stream!
    Ну что ж, ждём продолжения.
    Хочу ВСЁ писать на ассемблере, а не только вставки в С/С++ код. Но пока много чего не понимаю.
    Недавно я стал работать с M4 — вообще «в ёлочку» будет.
    С Уважением, A-Soft.

    #21818

    OttoDietrich
    Участник
    • Оффлайн

    Здравствуйте. У вас есть презентация вашей STM32H745I https://www.youtube.com/watch?v=pNPlW9wyo98

    Будут ли уроки связанные с ней ?

    #21887

    admira1
    Участник
    • Оффлайн

    Здравствуйте, уже второй месяц пошел а я так и не продвинулся в написании программы, ethernet to uart. По порядку
    Приобрел для проекта отладочную плату nucleo h743zi2 на плате присутствует физика lan 8742.
    И начал писать программу, до этого с ethernet на stm32 не сталкивался.
    Проблема заключается в следующем. В H7 микроконтроллерах, нужно включить кэш данных и кэш инструкций, настроить MPU. Далее включил ethernet с протоколом общения физики и камня RMII, далее включаю lwip. Отключаю динамическую адресацию, вписываю настройки сетки. Ну и настраиваю все rcc и увиличиваю стэк и кучу и тд. Далее генерирую код, и настраиваю кейл, в кейле во вкладке опции для цели — цели снимаю галку на Iram1 оставляю галку Iram2(ЭТО КАК Я ПОНЯЛ НУЖНО ЧТОБЫ ETHERNET И DMA МОГЛИ ДРУЖИТЬ). Далее в main прописываю структуру gnetif и в бесконечном цикле делаю MX_process(), компилирую все это дело, пингую и ничего(заданый узел недоступен)(пробовал как в ваших видео тоже не работает). Далее проверяю есть ли подключение, (netif_is_up), вывел светодиодики(на плате user led) когда вытаскиваю кабель ehernet (все меняться светодиодик тухнет другой загорается), т.е. физику микроконтроллер видит. Не понимаю в чем может быть проблема, все делаю по инструкции написанной самим STM а оно не работает.

    2) закупил такой же комплект как у вас в уроках stm disko f407 и waveshare lan8720 все сделал по вашему уроку (помоему 89), и опять проверяем работу физики и мк, пробуем пингануть плату получаем (заданый узел недоступен).
    Кароче очень сильно устал перерыл весь интернет, помогите пожалуйста разобраться…

    #22003

    A-Soft
    Участник
    • Оффлайн

    Здравствуйте, NarodStream!
    Очень интересен такой момент — как программировать STM32 на с++?
    А именно связка CubeMX -> Keil -> c++
    Как-то так чтобы потом можно было и в кубе редактировать.
    Надо не столько синтаксис c++, сколько сам рабочий проект (мигание светика) и как им пользоваться.

    #22173

    pvg_79
    Участник
    • Оффлайн

    Люди как создать новую тему?
    Интересует I2C Slave на библиотеке HAL, у меня ничего не получается.

    #22174

    Oleg Nicolaiciuc
    Участник
    • Оффлайн

    Всем привет!
    Извените если не в тему вопрос! Не решал ли кто нибудь задачу вывода изображения на TFT дисплей? Какой из стандартных графических форматов (*.pic, *.pcx, *.jpg, *.bmp …) наиболее просто преобразуется в линейную последовательность пикселей в условиях дефицита оперативной памяти. Может быть существуют какие либо библиотеки или кто нибудь может поделиться исходниками? Приветствуются любые идеи!

    #22247

    Ilfat
    Участник
    • Оффлайн

    Здравствуйте не могу пропинговать контроллер(Stm32f7Discovery) когда запущена инициализация GUI, не подскажете в чем может быть проблема(без GUI_Init() пингуется)?

    #22252

    RedOrm
    Участник
    • Оффлайн

    Пробую написать программу на STM32 используя HAL библиотеки. В программе инициализируются три таймера номер 3 (TIM3), номер 5 (TIM5), номер 2 (TIM2).

    TIM3 тактируется от внутреннего источника (от шины), работает в режиме ШИМ и формирует на выходе меандр с частотой 1,2 МГц.
    TIM5 тактируется от TIM3, работает в режиме ШИМ.
    TIM2 тактируется от TIM3, работает в режиме сравнения.

    Как хотелось бы чтобы работало:

    Таймеры запускаются одновременно. Разрешается прерывание по TIM2 по значению Pulse в STM32CubeMX. TIM2 отсчитывает интервал времени в течение которого TIM5 сформирует на выходе два импульса ШИМ с заданной частотой и заполнением. Когда TIM2 досчитывает до конца временного интервала (значение Pulse в STM32CubeMX), формируется прерывание.

    В обработчике прерывания меняется заполнение импульсов, которые формирует TIM5. Запрещается прерывание TIM2 по значению Pulse и разрешается прерывание TIM2 по переполнению.

    Далее таймеры продолжают считать. TIM5 формирует один импульс с измененным заполнением и возникает переполнение по переполнению TIM2.

    В обработчике прерывания меняется заполнение импульсов, которые формирует TIM5, на изначальное значение. Запрещается прерывание TIM2 по переполнению, разрешается прерывание TIM2 по значению Pulse.

    И так по кругу… TIM5 на выходе должен формировать последовательность импульсов: два с одинаковым заполнением, один с меньшим, опять два с одинаковым, опять один с меньшим и т.д.

    Написал такой код main.c:

    Обработка прерываний такая:

    Начинаю отлаживать. Пробую сначала работу без второго обработчика прерывания. Вижу следующую картину

    #22278

    Alojs82
    Участник
    • Оффлайн

    Добрый день,
    Я программирую STM32 какое-то время. Пожалуйста, сделал ли кто-нибудь связь по протоколу MODBUS TCP / IP.
    Я хотел бы сделать преобразователь данных из STM32 (например, температуры и входов / выходов) в ПЛК Siemens.
    Это о том, как происходило общение в STM32.

    Я купил комплект DISCOVERY_F767ZI с портом Ethernet (LAN8742A-CZ-)

    Спасибо.

    #22279

    Chirila Constantin
    Участник
    • Оффлайн

    Добрый день.

    Сайт Keil не работает, подскажите, пожалуйста, где найти инсталяцию MDK ARM STM 32 version 5, хщчу начать заниматься STM32, так занимаюсь AVR — ами.

    #22319

    diegoarmanda
    Участник
    • Оффлайн

    Здравствуйте! Хотелось бы увидеть от вас уроки по настройке GPS с STM32

    #22325

    Vladimir4444
    Участник
    • Оффлайн

    Есть силовая часть для BLDC в сборе на транзисторах gp10nc60kd и ir2106s
    Мотор на 100 вольт 2000 ватт BLDC на постоянных магнитах от стиральной машинки LG а так же, есть STM32F103. Помогите найти прошивку чтобы сделать контроллер.
    С моей стороны, посильная помощь. Очень прошу! Хочу запустить этот мотор для собственныз нужд. А знаний по программированию абсолютно ноль.

Просмотр 15 сообщений - с 136 по 150 (из 169 всего)
  • Для ответа в этой теме необходимо авторизоваться.