qmk / qmk_firmware

Open-source keyboard firmware for Atmel AVR and Arm USB families
https://qmk.fm
GNU General Public License v2.0
18.01k stars 38.72k forks source link

[Bug] audio_pwm_hardware.c compile error #19097

Closed boulevard-h closed 1 year ago

boulevard-h commented 1 year ago

Describe the Bug

I'm adding a piezo buzzer to my keyboard using stm32f103c8t6 mcu. According to the qmk docs, I my code about AUDIO is: in rules.mk:

AUDIO_ENABLE = yes
AUDIO_DRIVER = pwm_hardware

in config.h:

#define AUDIO_PIN A8
#define AUDIO_PWM_DRIVER PWMD1
#define AUDIO_PWM_CHANNEL 1
#define AUDIO_CLICKY

when I compile my program, error occurs:

Compiling: platforms/chibios/drivers/audio_pwm_hardware.c
               platforms/chibios/drivers/audio_pwm_hardware.c:40:8: error: unknown type name 'PWMConfig'
   40 | static PWMConfig pwmCFG = {
      |        ^~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:41:5: error: field name not in record or union initializer
   41 |     .frequency = 100000, /* PWM clock frequency  */
      |     ^
platforms/chibios/drivers/audio_pwm_hardware.c:41:5: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:43:5: error: field name not in record or union initializer
   43 |     .period   = 2,    /* initial PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
      |     ^
platforms/chibios/drivers/audio_pwm_hardware.c:43:5: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:43:17: error: excess elements in scalar initializer [-Werror]
   43 |     .period   = 2,    /* initial PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
      |                 ^
platforms/chibios/drivers/audio_pwm_hardware.c:43:17: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:44:5: error: field name not in record or union initializer
   44 |     .callback = NULL, /* no callback, the hardware directly toggles the pin */
      |     ^
platforms/chibios/drivers/audio_pwm_hardware.c:44:5: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:44:17: error: excess elements in scalar initializer [-Werror]
   44 |     .callback = NULL, /* no callback, the hardware directly toggles the pin */
      |                 ^~~~
platforms/chibios/drivers/audio_pwm_hardware.c:44:17: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:45:5: error: field name not in record or union initializer
   45 |     .channels =
      |     ^
platforms/chibios/drivers/audio_pwm_hardware.c:45:5: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:46:9: error: braces around scalar initializer [-Werror]
   46 |         {
      |         ^
platforms/chibios/drivers/audio_pwm_hardware.c:46:9: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:63:13: error: braces around scalar initializer [-Werror]
   63 |             {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* TIMx_CH1 */
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:63:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:63:14: error: 'PWM_OUTPUT_ACTIVE_HIGH' undeclared here (not in a function)
   63 |             {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* TIMx_CH1 */
      |              ^~~~~~~~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:63:38: error: excess elements in scalar initializer [-Werror]
   63 |             {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* TIMx_CH1 */
      |                                      ^~~~
platforms/chibios/drivers/audio_pwm_hardware.c:63:38: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:64:13: error: braces around scalar initializer [-Werror]
   64 |             {PWM_OUTPUT_DISABLED, NULL},
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:64:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:64:14: error: 'PWM_OUTPUT_DISABLED' undeclared here (not in a function)
   64 |             {PWM_OUTPUT_DISABLED, NULL},
      |              ^~~~~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:64:35: error: excess elements in scalar initializer [-Werror]
   64 |             {PWM_OUTPUT_DISABLED, NULL},
      |                                   ^~~~
platforms/chibios/drivers/audio_pwm_hardware.c:64:35: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:64:13: error: excess elements in scalar initializer [-Werror]
   64 |             {PWM_OUTPUT_DISABLED, NULL},
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:64:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:65:13: error: braces around scalar initializer [-Werror]
   65 |             {PWM_OUTPUT_DISABLED, NULL},
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:65:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:65:35: error: excess elements in scalar initializer [-Werror]
   65 |             {PWM_OUTPUT_DISABLED, NULL},
      |                                   ^~~~
platforms/chibios/drivers/audio_pwm_hardware.c:65:35: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:65:13: error: excess elements in scalar initializer [-Werror]
   65 |             {PWM_OUTPUT_DISABLED, NULL},
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:65:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:66:13: error: braces around scalar initializer [-Werror]
   66 |             {PWM_OUTPUT_DISABLED, NULL}
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:66:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:66:35: error: excess elements in scalar initializer [-Werror]
   66 |             {PWM_OUTPUT_DISABLED, NULL}
      |                                   ^~~~
platforms/chibios/drivers/audio_pwm_hardware.c:66:35: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:66:13: error: excess elements in scalar initializer [-Werror]
   66 |             {PWM_OUTPUT_DISABLED, NULL}
      |             ^
platforms/chibios/drivers/audio_pwm_hardware.c:66:13: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:46:9: error: excess elements in scalar initializer [-Werror]
   46 |         {
      |         ^
platforms/chibios/drivers/audio_pwm_hardware.c:46:9: note: (near initialization for 'pwmCFG')
platforms/chibios/drivers/audio_pwm_hardware.c: In function 'channel_1_set_frequency':
platforms/chibios/drivers/audio_pwm_hardware.c:78:5: error: unknown type name 'pwmcnt_t'; did you mean 'wint_t'?
   78 |     pwmcnt_t period = (pwmCFG.frequency / freq);
      |     ^~~~~~~~
      |     wint_t
platforms/chibios/drivers/audio_pwm_hardware.c:78:30: error: request for member 'frequency' in something not a structure or union
   78 |     pwmcnt_t period = (pwmCFG.frequency / freq);
      |                              ^
platforms/chibios/drivers/audio_pwm_hardware.c:79:5: error: implicit declaration of function 'pwmChangePeriod' [-Werror=implicit-function-declaration]
   79 |     pwmChangePeriod(&AUDIO_PWM_DRIVER, period);
      |     ^~~~~~~~~~~~~~~
In file included from <command-line>:
./keyboards/apm32dvlp/config.h:37:26: error: 'PWMD1' undeclared (first use in this function)
   37 | #define AUDIO_PWM_DRIVER PWMD1
      |                          ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:79:22: note: in expansion of macro 'AUDIO_PWM_DRIVER'
   79 |     pwmChangePeriod(&AUDIO_PWM_DRIVER, period);
      |                      ^~~~~~~~~~~~~~~~
./keyboards/apm32dvlp/config.h:37:26: note: each undeclared identifier is reported only once for each function it appears in
   37 | #define AUDIO_PWM_DRIVER PWMD1
      |                          ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:79:22: note: in expansion of macro 'AUDIO_PWM_DRIVER'
   79 |     pwmChangePeriod(&AUDIO_PWM_DRIVER, period);
      |                      ^~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:80:5: error: implicit declaration of function 'pwmEnableChannel' [-Werror=implicit-function-declaration]
   80 |     pwmEnableChannel(&AUDIO_PWM_DRIVER, AUDIO_PWM_CHANNEL - 1,
      |     ^~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:82:22: error: implicit declaration of function 'PWM_PERCENTAGE_TO_WIDTH' [-Werror=implicit-function-declaration]
   82 |                      PWM_PERCENTAGE_TO_WIDTH(&AUDIO_PWM_DRIVER, (100 - note_timbre) * 100));
      |                      ^~~~~~~~~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c: In function 'channel_1_start':
platforms/chibios/drivers/audio_pwm_hardware.c:90:5: error: implicit declaration of function 'pwmStop' [-Werror=implicit-function-declaration]
   90 |     pwmStop(&AUDIO_PWM_DRIVER);
      |     ^~~~~~~
In file included from <command-line>:
./keyboards/apm32dvlp/config.h:37:26: error: 'PWMD1' undeclared (first use in this function)
   37 | #define AUDIO_PWM_DRIVER PWMD1
      |                          ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:90:14: note: in expansion of macro 'AUDIO_PWM_DRIVER'
   90 |     pwmStop(&AUDIO_PWM_DRIVER);
      |              ^~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:91:5: error: implicit declaration of function 'pwmStart' [-Werror=implicit-function-declaration]
   91 |     pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG);
      |     ^~~~~~~~
In file included from <command-line>:
platforms/chibios/drivers/audio_pwm_hardware.c: In function 'channel_1_stop':
./keyboards/apm32dvlp/config.h:37:26: error: 'PWMD1' undeclared (first use in this function)
   37 | #define AUDIO_PWM_DRIVER PWMD1
      |                          ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:95:14: note: in expansion of macro 'AUDIO_PWM_DRIVER'
   95 |     pwmStop(&AUDIO_PWM_DRIVER);
      |              ^~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c: At top level:
platforms/chibios/drivers/audio_pwm_hardware.c:98:26: error: unknown type name 'GPTDriver'; did you mean 'USBDriver'?
   98 | static void gpt_callback(GPTDriver *gptp);
      |                          ^~~~~~~~~
      |                          USBDriver
platforms/chibios/drivers/audio_pwm_hardware.c:99:1: error: unknown type name 'GPTConfig'; did you mean 'USBConfig'?
   99 | GPTConfig   gptCFG = {
      | ^~~~~~~~~
      | USBConfig
platforms/chibios/drivers/audio_pwm_hardware.c:107:5: error: field name not in record or union initializer
  107 |     .frequency = 60 * 64,
      |     ^
platforms/chibios/drivers/audio_pwm_hardware.c:107:5: note: (near initialization for 'gptCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:108:5: error: field name not in record or union initializer
  108 |     .callback  = gpt_callback,
      |     ^
platforms/chibios/drivers/audio_pwm_hardware.c:108:5: note: (near initialization for 'gptCFG')
platforms/chibios/drivers/audio_pwm_hardware.c:108:18: error: 'gpt_callback' undeclared here (not in a function); did you mean 'st_callback_t'?
  108 |     .callback  = gpt_callback,
      |                  ^~~~~~~~~~~~
      |                  st_callback_t
platforms/chibios/drivers/audio_pwm_hardware.c:108:18: error: excess elements in scalar initializer [-Werror]
platforms/chibios/drivers/audio_pwm_hardware.c:108:18: note: (near initialization for 'gptCFG')
In file included from <command-line>:
platforms/chibios/drivers/audio_pwm_hardware.c: In function 'audio_driver_initialize':
./keyboards/apm32dvlp/config.h:37:26: error: 'PWMD1' undeclared (first use in this function)
   37 | #define AUDIO_PWM_DRIVER PWMD1
      |                          ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:112:15: note: in expansion of macro 'AUDIO_PWM_DRIVER'
  112 |     pwmStart(&AUDIO_PWM_DRIVER, &pwmCFG);
      |               ^~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:121:5: error: implicit declaration of function 'gptStart' [-Werror=implicit-function-declaration]
  121 |     gptStart(&AUDIO_STATE_TIMER, &gptCFG);
      |     ^~~~~~~~
In file included from quantum/audio/audio.h:32,
                 from platforms/chibios/drivers/audio_pwm_hardware.c:28:
platforms/chibios/drivers/audio_pwm.h:39:31: error: 'GPTD6' undeclared (first use in this function)
   39 | #    define AUDIO_STATE_TIMER GPTD6
      |                               ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:121:15: note: in expansion of macro 'AUDIO_STATE_TIMER'
  121 |     gptStart(&AUDIO_STATE_TIMER, &gptCFG);
      |               ^~~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c: In function 'audio_driver_start':
platforms/chibios/drivers/audio_pwm_hardware.c:129:9: error: implicit declaration of function 'gptStartContinuous' [-Werror=implicit-function-declaration]
  129 |         gptStartContinuous(&AUDIO_STATE_TIMER, 64);
      |         ^~~~~~~~~~~~~~~~~~
In file included from quantum/audio/audio.h:32,
                 from platforms/chibios/drivers/audio_pwm_hardware.c:28:
platforms/chibios/drivers/audio_pwm.h:39:31: error: 'GPTD6' undeclared (first use in this function)
   39 | #    define AUDIO_STATE_TIMER GPTD6
      |                               ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:129:29: note: in expansion of macro 'AUDIO_STATE_TIMER'
  129 |         gptStartContinuous(&AUDIO_STATE_TIMER, 64);
      |                             ^~~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c: In function 'audio_driver_stop':
platforms/chibios/drivers/audio_pwm_hardware.c:135:5: error: implicit declaration of function 'gptStopTimer' [-Werror=implicit-function-declaration]
  135 |     gptStopTimer(&AUDIO_STATE_TIMER);
      |     ^~~~~~~~~~~~
In file included from quantum/audio/audio.h:32,
                 from platforms/chibios/drivers/audio_pwm_hardware.c:28:
platforms/chibios/drivers/audio_pwm.h:39:31: error: 'GPTD6' undeclared (first use in this function)
   39 | #    define AUDIO_STATE_TIMER GPTD6
      |                               ^~~~~
platforms/chibios/drivers/audio_pwm_hardware.c:135:19: note: in expansion of macro 'AUDIO_STATE_TIMER'
  135 |     gptStopTimer(&AUDIO_STATE_TIMER);
      |                   ^~~~~~~~~~~~~~~~~
platforms/chibios/drivers/audio_pwm_hardware.c: At top level:
platforms/chibios/drivers/audio_pwm_hardware.c:141:26: error: unknown type name 'GPTDriver'; did you mean 'USBDriver'?
  141 | static void gpt_callback(GPTDriver *gptp) {
      |                          ^~~~~~~~~
      |                          USBDriver
cc1.exe: all warnings being treated as errors
 [ERRORS]

Keyboard Used

No response

Link to product page (if applicable)

No response

Operating System

No response

qmk doctor Output

No response

Is AutoHotKey / Karabiner installed

Other keyboard-related software installed

No response

Additional Context

No response

zvecr commented 1 year ago

Not really a bug, more the failure to correctly configure the dependent hardware https://docs.qmk.fm/#/audio_driver?id=pwm-hardware.