写一个stm32c8t6从PA15输出蜂鸣器唱歌的程序
时间: 2024-05-05 08:17:52 浏览: 92
可以的,以下是代码:
```c
#include "stm32c8t6.h"
int main() {
// 配置 PA15 为推挽输出模式
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
GPIOA->MODER &= ~GPIO_MODER_MODER15_Msk;
GPIOA->MODER |= GPIO_MODER_MODER15_0;
GPIOA->OTYPER &= ~GPIO_OTYPER_OT_15;
GPIOA->OSPEEDR &= ~GPIO_OSPEEDR_OSPEEDR15_Msk;
GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR15_Msk;
// 播放 Do Re Mi
int frequency[] = {262, 294, 330};
int duration[] = {200, 200, 400};
for (int i = 0; i < 3; i++) {
int period = SystemCoreClock / frequency[i];
int half_period = period / 2;
int cycles = frequency[i] * duration[i] / 1000;
for (int j = 0; j < cycles; j++) {
GPIOA->BSRR |= GPIO_BSRR_BS_15;
for (int k = 0; k < half_period; k++) {
__asm__("nop");
}
GPIOA->BRR |= GPIO_BRR_BR_15;
for (int k = 0; k < half_period; k++) {
__asm__("nop");
}
}
}
while (1);
}
```
该程序会在 PA15 输出频率为 262Hz、294Hz、330Hz 的三个音符,每个音符的持续时间分别为 200ms、200ms、400ms,然后停止运行。如果需要循环播放,可以在最后加上一个无限循环的 while(1) 语句。
阅读全文