Я использовал STM32F407VG для создания синусоидальной волны 30 кГц. Настройки таймера есть; Предделитель = 2-1, ARR = 1, также частота составляет 84 МГц (часы, на которых работает ЦАП).
Я написал функцию под названием generate_sin ();
#define SINE_ARY_SIZE (360)
const int MAX_SINE_DEGERI = 4095; // max_sine_value
const double BASLANGIC_NOKTASI = 2047.5; //starting point
uint32_t sine_ary[SINE_ARY_SIZE];
void generate_sine(){
for (int i = 0; i < SINE_ARY_SIZE; i++){
double deger = (sin(i*M_PI*360/180/SINE_ARY_SIZE) * BASLANGIC_NOKTASI) + BASLANGIC_NOKTASI; //double value
sine_ary[i] = (uint32_t)deger; // value
}
Это функция, которая создает синусоидальную волну. Я использовал HAL DMA для отправки выходных переменных ЦАП.
HAL_TIM_Base_Start(&htim2);
generate_sine();
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, sine_ary, SINE_ARY_SIZE, DAC_ALIGN_12B_R);
Это коды, которые я использовал, чтобы делать то, что хочу. Но у меня возникли проблемы с изменением частоты без изменения предделителя или ARR.
Вот мой вопрос. Могу ли я изменить частоту, не меняя настроек таймера? Например, я хочу использовать кнопки, и всякий раз, когда я нажимаю кнопку, я хочу, чтобы моя частота менялась.