Заметки электроника
Простое - надёжнее!
Меню
  • Главная
  • Погода
  • Заметки
  • Календарь
  • Фотогалерея
  • Песни
  • Чтиво
  • Программы
  • Скачать
  • Связь и ссылки
  • Чехия
  • Lavka

Живёшь в Чехии?

Git: delete all old commits (also from remote)

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Компьютерная повседневность
Создано: 22 марта 2023
Обновлено: 22 марта 2023
Просмотров: 902
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
git checkout --orphan latest_branch
git add .
git commit -m "commit message"
git branch -D main
git branch -m main
git push -f origin main

source> https://blog.avneesh.tech/how-to-delete-all-commit-history-in-github

STM32F4xx: Code that uses the one-shot mode of TIM2_CH1 to generate a sinusoidal output by alternating the duty cycle of each pulse

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 20 марта 2023
Обновлено: 20 марта 2023
Просмотров: 793
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
#include "stm32f4xx.h"
#include <math.h>

#define PWM_FREQ 400000   // Base frequency of the PWM output
#define PWM_PERIOD_US 100 // Period of the PWM output in microseconds

#define NUM_SAMPLES 100   // Number of samples per PWM period
#define PI 3.14159265358979323846

uint16_t duty_cycles[NUM_SAMPLES]; // Array of duty cycles for each sample
uint16_t current_sample = 0;       // Index of current sample in the duty_cycles array

void TIM2_IRQHandler(void) {
    if (TIM2->SR & TIM_SR_UIF) { // Check if the update interrupt flag is set
        TIM2->SR &= ~TIM_SR_UIF; // Clear the update interrupt flag

        // Set the duty cycle for the current sample
        TIM2->CCR1 = duty_cycles[current_sample];

        // Increment the sample index, wrapping around if necessary
        current_sample = (current_sample + 1) % NUM_SAMPLES;
    }
}

int main(void) {
    // Enable clock for GPIOA and TIM2
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

    // Configure GPIOA pin 0 as alternate function mode
    GPIOA->MODER &= ~GPIO_MODER_MODE0;
    GPIOA->MODER |= GPIO_MODER_MODE0_1;
    GPIOA->AFR[0] |= GPIO_AFRL_AFRL0_1; // Set alternate function to TIM2_CH1

    // Generate duty cycle values for a sinusoidal waveform
    for (uint16_t i = 0; i < NUM_SAMPLES; i++) {
        float phase = 2.0 * PI * i / NUM_SAMPLES;
        duty_cycles[i] = (uint16_t)((1.0 + sin(phase)) * 0.5 * 65535.0);
    }

    // Configure TIM2 for one-shot PWM output on CH1
    TIM2->PSC = 0; // Set prescaler to 1
    TIM2->ARR = PWM_PERIOD_US * (SystemCoreClock / 1000000) - 1; // Set auto-reload value for PWM period
    TIM2->CCR1 = 0; // Set initial duty cycle to 0%
    TIM2->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // Set PWM mode to mode 1
    TIM2->CCER |= TIM_CCER_CC1E; // Enable capture/compare channel 1 output
    TIM2->DIER |= TIM_DIER_UIE; // Enable update interrupt
    NVIC_EnableIRQ(TIM2_IRQn); // Enable TIM2 interrupt in NVIC
    TIM2->CR1 |= TIM_CR1_CEN;   // Start the timer

    while (1) {
        // Wait for interrupt to update duty cycle
    }
}
using HAL:
#include "main.h"
#include "stm32f4xx_hal.h"
#include <math.h>

#define PWM_FREQ 400000   // Base frequency of the PWM output
#define PWM_PERIOD_US 100 // Period of the PWM output in microseconds

#define NUM_SAMPLES 100   // Number of samples per PWM period
#define PI 3.14159265358979323846

TIM_HandleTypeDef htim2;
uint16_t duty_cycles[NUM_SAMPLES]; // Array of duty cycles for each sample
uint16_t current_sample = 0;       // Index of current sample in the duty_cycles array

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim->Instance == TIM2) {
        // Set the duty cycle for the current sample
        TIM2->Instance->CCR1 = duty_cycles[current_sample];

        // Increment the sample index, wrapping around if necessary
        current_sample = (current_sample + 1) % NUM_SAMPLES;
    }
}

int main(void) {
    // Initialize HAL
    HAL_Init();

    // Enable clock for GPIOA and TIM2
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_TIM2_CLK_ENABLE();

    // Configure GPIOA pin 0 as alternate function mode
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // Generate duty cycle values for a sinusoidal waveform
    for (uint16_t i = 0; i < NUM_SAMPLES; i++) {
        float phase = 2.0 * PI * i / NUM_SAMPLES;
        duty_cycles[i] = (uint16_t)((1.0 + sin(phase)) * 0.5 * 65535.0);
    }

    // Configure TIM2 for one-shot PWM output on CH1
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 0;
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = PWM_PERIOD_US * (SystemCoreClock / 1000000) - 1;
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim2.Init.RepetitionCounter = 0;
    HAL_TIM_PWM_Init(&htim2);

    TIM_OC_InitTypeDef sConfigOC = {0};
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);

    HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);

    while (1) {
        // Wait for interrupt to update duty cycle
    }
}

STM32+Ethernet link collection

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 13 марта 2023
Обновлено: 16 марта 2023
Просмотров: 857
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

STM32 Ethernet #1. Connection

WSPR TRXes collection

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Электроника / cхемотехника
Создано: 15 марта 2023
Обновлено: 15 марта 2023
Просмотров: 845
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
http://protofusion.org/wordpress/2017/09/tracking-balloons-with-wspr/
http://shop.qrp-labs.com/U3S
https://www.qrp-labs.com/flights/u3b27.html
https://www.zachtek.com/product-page/wspr-tx-pico-transmitter-with-large-solar-cells
https://www.zachtek.com/1028

''Tablet PC Settings'' option in Windows 11

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Компьютерная повседневность
Создано: 07 марта 2023
Обновлено: 07 марта 2023
Просмотров: 954
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

Go to the Desktop.

 

Right click on the Desktop and select New/Shortcut.

 

In the Type the location of the item window, Copy/Paste the following.

 

%windir%\explorer.exe shell:::{80F3F1D5-FECA-45F3-BC32-752C152E456E}

 


Click the Next button and type the name Tablet PC Settings.

 


Click the Finish button.

 


Double Click the new shortcut and it should open the Table PC Settings window.

  1. Какие типы оптоизоляторов подходят для вашего сигнала?
  2. Как сделать инфракрасную охлаждающую краску (кондиционирование без электричества)
  3. Construct The APRS transceiver part one: collect
  4. Mastering Midjourney in 2023 | The Ultimate Guide

Страница 43 из 196

  • 38
  • 39
  • ...
  • 41
  • 42
  • 43
  • 44
  • ...
  • 46
  • 47

Back to Top

© 2026 Заметки электроника

Top.Mail.Ru