I got the uSart10 working, dont know why its not working with uart4. The USART10 is ok for me, so I close these question.
I got the uSart10 working, dont know why its not working with uart4. The USART10 is ok for me, so I close these question.
by debugging further, I found out, that the UART4_IRQHandler is called only once, when the UART ist setup:
rt_thread/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart.c:244
stm32_control()
Shoulnd this UART4_IRQHandler called each time, when msh or finsh print something?
I forgot, this is the code I copy from CubeMX to board.c. It is called direct after SystemClock_Config:
void HAL_UART_MspInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART4;
PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* Peripheral clock enable */
__HAL_RCC_UART4_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**UART4 GPIO Configuration
PC10 ------> UART4_TX
PC11 ------> UART4_RX
*/
GPIO_InitStruct.Pin = U4TX_Pin|U4RX_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* UART4 interrupt Init */
HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(UART4_IRQn);
}
I got some progress. There seem to be some gcc or/and C99 problems with the TinyUSB package. I am now able to compile, after doing the following hacks:
/home/micha/rt_thread/rt-thread/bsp/raspberry-pico/packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h
(see also here: https://github.com/raspberrypi/pico-sdk/issues/339)
Handle GCC different from other compilers:
rt-thread/bsp/raspberry-pico/packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h
#define hw_set_alias(p) ((__typeof__(p))hw_set_alias_untyped(p))
#define hw_clear_alias(p) ((__typeof__(p))hw_clear_alias_untyped(p))
#define hw_xor_alias(p) ((__typeof__(p))hw_xor_alias_untyped(p))
#define xip_noalloc_alias(p) ((__typeof__(p))xip_noalloc_alias_untyped(p))
#define xip_nocache_alias(p) ((__typeof__(p))xip_nocache_alias_untyped(p))
#define xip_nocache_noalloc_alias(p) ((__typeof__(p))xip_nocache_noalloc_alias_untyped(p))
#define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p))
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
#define hw_xor_alias(p) ((typeof(p))hw_xor_alias_untyped(p))
#define xip_noalloc_alias(p) ((typeof(p))xip_noalloc_alias_untyped(p))
#define xip_nocache_alias(p) ((typeof(p))xip_nocache_alias_untyped(p))
#define xip_nocache_noalloc_alias(p) ((typeof(p))xip_nocache_noalloc_alias_untyped(p))
This is just a dirty hack, but at least, it compiles. Maybe the TinyUSB package maintainer set some flags, that the GCC/C99 problem with Pico(RP2040) get fixed.
I am still very new to RT-Thread. It seems, I forgot "pkgs --update" after selecting tinyUSB in menuconfig. So I did the update, then start scons again.
Give a lot of error messages:
scons: Reading SConscript files ...
Newlib version: 2.4.0
Enter /home/micha/rt_thread/rt-thread/bsp/raspberry-pico/packages/raspberrypi-pico-sdk-latest
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC packages/TinyUSB-v0.14.1/rt-thread/bsp/rp2040/drv_tinyusb.o
CC packages/TinyUSB-v0.14.1/rt-thread/tinyusb_port.o
CC packages/TinyUSB-v0.14.1/rt-thread/usb_descriptor.o
CC packages/TinyUSB-v0.14.1/src/class/cdc/cdc_device.o
CC packages/TinyUSB-v0.14.1/src/common/tusb_fifo.o
CC packages/TinyUSB-v0.14.1/src/device/usbd.o
CC packages/TinyUSB-v0.14.1/src/device/usbd_control.o
CC packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.o
In file included from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/rp2040_usb.h:11:0,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:32:
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:91:15: error: expected declaration specifiers or '...' before 'sizeof'
static_assert(sizeof(usb_device_dpram_t) == USB_DPRAM_MAX, "");
^~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:91:60: error: expected declaration specifiers or '...' before string constant
static_assert(sizeof(usb_device_dpram_t) == USB_DPRAM_MAX, "");
^~
In file included from /opt/gcc-arm-none-eabi-6_2-2016q4/arm-none-eabi/include/stdio.h:36:0,
from packages/TinyUSB-v0.14.1/src/common/tusb_common.h:67,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/rp2040_usb.h:8,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:32:
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:92:15: error: expected declaration specifiers or '...' before '__builtin_offsetof'
static_assert(offsetof(usb_device_dpram_t, epx_data) == 0x180, "");
^
In file included from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/rp2040_usb.h:11:0,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:32:
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:92:64: error: expected declaration specifiers or '...' before string constant
static_assert(offsetof(usb_device_dpram_t, epx_data) == 0x180, "");
^~
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:121:15: error: expected declaration specifiers or '...' before 'sizeof'
static_assert(sizeof(usb_host_dpram_t) == USB_DPRAM_MAX, "");
^~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:121:58: error: expected declaration specifiers or '...' before string constant
static_assert(sizeof(usb_host_dpram_t) == USB_DPRAM_MAX, "");
^~
In file included from /opt/gcc-arm-none-eabi-6_2-2016q4/arm-none-eabi/include/stdio.h:36:0,
from packages/TinyUSB-v0.14.1/src/common/tusb_common.h:67,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/rp2040_usb.h:8,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:32:
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:122:15: error: expected declaration specifiers or '...' before '__builtin_offsetof'
static_assert(offsetof(usb_host_dpram_t, epx_data) == 0x180, "");
^
In file included from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/rp2040_usb.h:11:0,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:32:
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:122:62: error: expected declaration specifiers or '...' before string constant
static_assert(offsetof(usb_host_dpram_t, epx_data) == 0x180, "");
^~
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:32:38: error: expected declaration specifiers or '...' before '(' token
#define USB_HOST_INTERRUPT_ENDPOINTS (USB_NUM_ENDPOINTS - 1)
^
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:576:16: note: in expansion of macro 'USB_HOST_INTERRUPT_ENDPOINTS'
static_assert( USB_HOST_INTERRUPT_ENDPOINTS == 15, "");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:576:52: error: expected declaration specifiers or '...' before string constant
static_assert( USB_HOST_INTERRUPT_ENDPOINTS == 15, "");
^~
In file included from packages/raspberrypi-pico-sdk-latest/src/rp2040/hardware_structs/include/hardware/structs/usb.h:12:0,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/rp2040_usb.h:11,
from packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:32:
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'hw_handle_buff_status':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: warning: implicit declaration of function 'typeof' [-Wimplicit-function-declaration]
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
^
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:201:13: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->buf_status = bit;
^~~~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:201:13: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->buf_status = bit;
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'dcd_rp2040_irq':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:258:25: note: in expansion of macro 'usb_hw_clear'
if (!_sof_enable) usb_hw_clear->inte = USB_INTS_DEV_SOF_BITS;
^~~~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:281:9: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->sie_status = USB_SIE_STATUS_SETUP_REC_BITS;
^~~~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:314:9: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->sie_status = USB_SIE_STATUS_BUS_RESET_BITS;
^~~~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:334:9: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->sie_status = USB_SIE_STATUS_SUSPENDED_BITS;
^~~~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:341:9: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->sie_status = USB_SIE_STATUS_RESUME_BITS;
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'dcd_remote_wakeup':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:108:27: error: called object is not a function or function pointer
#define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:49:20: note: in expansion of macro 'hw_set_alias'
#define usb_hw_set hw_set_alias(usb_hw)
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:426:3: note: in expansion of macro 'usb_hw_set'
usb_hw_set->inte = USB_INTS_DEV_SOF_BITS;
^~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:108:27: error: called object is not a function or function pointer
#define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:49:20: note: in expansion of macro 'hw_set_alias'
#define usb_hw_set hw_set_alias(usb_hw)
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:427:3: note: in expansion of macro 'usb_hw_set'
usb_hw_set->sie_ctrl = USB_SIE_CTRL_RESUME_BITS;
^~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'dcd_disconnect':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:434:3: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->sie_ctrl = USB_SIE_CTRL_PULLUP_EN_BITS;
^~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'dcd_connect':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:108:27: error: called object is not a function or function pointer
#define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:49:20: note: in expansion of macro 'hw_set_alias'
#define usb_hw_set hw_set_alias(usb_hw)
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:441:3: note: in expansion of macro 'usb_hw_set'
usb_hw_set->sie_ctrl = USB_SIE_CTRL_PULLUP_EN_BITS;
^~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'dcd_sof_enable':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:108:27: error: called object is not a function or function pointer
#define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:49:20: note: in expansion of macro 'hw_set_alias'
#define usb_hw_set hw_set_alias(usb_hw)
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:452:5: note: in expansion of macro 'usb_hw_set'
usb_hw_set->inte = USB_INTS_DEV_SOF_BITS;
^~~~~~~~~~
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:109:29: error: called object is not a function or function pointer
#define hw_clear_alias(p) ((typeof(p))hw_clear_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:50:22: note: in expansion of macro 'hw_clear_alias'
#define usb_hw_clear hw_clear_alias(usb_hw)
^~~~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:455:5: note: in expansion of macro 'usb_hw_clear'
usb_hw_clear->inte = USB_INTS_DEV_SOF_BITS;
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c: In function 'dcd_edpt_stall':
packages/raspberrypi-pico-sdk-latest/src/rp2_common/hardware_base/include/hardware/address_mapped.h:108:27: error: called object is not a function or function pointer
#define hw_set_alias(p) ((typeof(p))hw_set_alias_untyped(p))
~^~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:49:20: note: in expansion of macro 'hw_set_alias'
#define usb_hw_set hw_set_alias(usb_hw)
^~~~~~~~~~~~
packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.c:504:5: note: in expansion of macro 'usb_hw_set'
usb_hw_set->ep_stall_arm = (tu_edpt_dir(ep_addr) == TUSB_DIR_IN) ? USB_EP_STALL_ARM_EP0_IN_BITS : USB_EP_STALL_ARM_EP0_OUT_BITS;
^~~~~~~~~~
scons: * [packages/TinyUSB-v0.14.1/src/portable/raspberrypi/rp2040/dcd_rp2040.o] Error 1
scons: building terminated because of errors
Dear rbbbb,
I downloaded the latest version from https://github.com/RT-Thread/rt-thread 2 days ago.
In the rt_thread/rt-thread/ChangeLog.md, it says V5.0.2
Ask Port to STM32H723: UART4 no console