Спасибо на добром слове.
Я не против библиотек в принципе. Мне не очень нравится, когда утверждают, что есть единственный и правильный способ использования микроконтроллеров посредством HAL. На мой взгляд, если способ удобен и позволяет добиться необходимого результата — имеет право на существование.
Мне тоже ближе CMSIS и работа с регистрами. И я считаю, что этот подход позволяет быть независимым в выборе производителя и архитектуры микроконтроллеров. HAL — это библиотека одного производителя, при смене которого будет другой инструментарий. :)
Синус на STM32H7 легко генерится софтом. Рабочий пример из программы генерации 2 фаз со сдвигом 180 градусов, т.е. в противофазе. Используются функции из DSP LIB.
Две переменные объявлены в main:
float angle_pointer_step = 3.6; //шаг разворачивания синуса
float angle_degree_offset_float = 180; //смещение второго канала
Остальное в прерывании:
//1 фаза угол
angle_degree_float = angle_degree_float + angle_pointer_step;
if (angle_degree_float >= 360 ) angle_degree_float = 0;
Значения делителей и множителей PLL необходимо устанавливать до запуска. После запуска поменять нельзя, нужно будет останавливать. Поэтому определенный порядок должен быть. Также и с выбором источника SysClk.
В Reference Manual детально описана инициализация PLL, а вот переключение SysClk на тактирование от PLL нет так явно. :) Пришлось потратить некоторое время на исследование HAL и формирование нужной последовательности.
Отличная статья... хороший слог и хорошая подача :)))
Поставил сборку на основе графического сервера Х11. Не получается связаться с сервером. :( community.st.com/s/question/0D53W0000080dmqSAA/i-have-2-problems-on-installed-stexampleimagex11
Пока в раздумьях, что же делать дальше. :)
community.st.com/s/question/0D50X0000C6ccsBSQQ/cant-open-devttyrpmsg0-
Проект для М4 в CubeIDE.
Я не против библиотек в принципе. Мне не очень нравится, когда утверждают, что есть единственный и правильный способ использования микроконтроллеров посредством HAL. На мой взгляд, если способ удобен и позволяет добиться необходимого результата — имеет право на существование.
Мне тоже ближе CMSIS и работа с регистрами. И я считаю, что этот подход позволяет быть независимым в выборе производителя и архитектуры микроконтроллеров. HAL — это библиотека одного производителя, при смене которого будет другой инструментарий. :)
По инверсии — не везде нужен сигнал в противофазе. :)
Две переменные объявлены в main:
float angle_pointer_step = 3.6; //шаг разворачивания синуса
float angle_degree_offset_float = 180; //смещение второго канала
Остальное в прерывании:
//1 фаза угол
angle_degree_float = angle_degree_float + angle_pointer_step;
if (angle_degree_float >= 360 ) angle_degree_float = 0;
angle_rad_A = (angle_degree_float * _Pi) / 180.0;
PWM_A_float = arm_sin_f32(angle_rad_A) * amplitude;
PWM_A = (signed long) PWM_A_float;
//2 фаза со смещение
angle_degree2_float = angle_degree_float + angle_degree_offset_float;
if (angle_degree2_float > 360)
{
angle_degree2_float = angle_degree2_float — 360;
}
angle_rad_B = (angle_degree2_float * _Pi) / 180.0;
PWM_B_float = arm_sin_f32(angle_rad_B) * amplitude;
PWM_B = (signed long) PWM_B_float;
Вывод в ЦАП для отладки
DAC1->DHR12R1 = 2048 + PWM_A;
DAC1->DHR12R2 = 2048 + PWM_B;
TIM4->SR &= ~TIM_SR_UIF; //сброс флага UIE: Update interrupt enable
void init_FMC(void)
{
RCC->AHB3ENR |= RCC_AHB3ENR_FMCEN;
FMC_Bank1->BTCR[0] = 0x000010D9; //for 168 MHz
FMC_Bank1->BTCR[1] = 0x000300F;
}
Инициализация FMC для F7.