完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试在我的 MIMXRT600 上设置第二个 USART。我从 SDK 轮询示例开始,想在 Flexcomm2 上添加第二个 USART。我设置时钟并将其连接到 Flexcomm 接口,初始化 USART 并发送一些东西,但我在电线上没有收到任何信号。
这是主要的代码。 #include "pin_mux.h" #include "clock_config.h" #include "board.h" #include "fsl_usart.h" #include "fsl_debug_console.h" /******************************************************************************* * Definitions ******************************************************************************/ #define DEBUG_BOOT_USART USART0 //#define DEBUG_BOOT_USART_CLK_SRC kCLOCK_Flexcomm0 #define DEBUG_BOOT_USART_CLK_FREQ CLOCK_GetFlexCommClkFreq(0U) #define SERIAL_BOOT_USART USART2 #define SERIAL_BOOT_USART_CLK_FREQ CLOCK_GetFlexCommClkFreq(2U) /******************************************************************************* * Prototypes ******************************************************************************/ /******************************************************************************* * Variables ******************************************************************************/ uint8_t txbuff1[] = "Flexcom1 Test\r\n"; uint8_t txbuff2[] = "Flexcom2 Test\r\n"; uint8_t rxbuff[20] = {0}; /******************************************************************************* * Code ******************************************************************************/ /*! * @brief Main functioné */ int main(void) { uint8_t ch; usart_config_t usart0_config; usart_config_t usart2_config; BOARD_InitBootPins(); BOARD_InitBootClocks(); BOARD_InitDebugConsole(); /* * config.baudRate_Bps = 115200U; * config.parityMode = kUSART_ParityDisabled; * config.stopBitCount = kUSART_OneStopBit; * config.loopback = false; * config.enableTx = false; * config.enableRx = false; */ USART_GetDefaultConfig(&usart0_config); usart0_config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; usart0_config.enableTx = true; usart0_config.enableRx = true; USART_Init(DEBUG_BOOT_USART, &usart0_config, DEBUG_BOOT_USART_CLK_FREQ); /* attach FRG0 clock to FLEXCOMM2 (debug console) */ CLOCK_SetFRGClock(SERIAL_BOOT_UART_FRG_CLK); CLOCK_AttachClk(SERIAL_BOOT_UART_CLK_ATTACH); USART_GetDefaultConfig(&usart2_config); usart2_config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; usart2_config.enableTx = true; usart2_config.enableRx = true; USART_Init(SERIAL_BOOT_USART, &usart2_config, SERIAL_BOOT_USART_CLK_FREQ); DbgConsole_Printf("DEBUG_BOOT_USART_CLK_FREQ: %d\n", DEBUG_BOOT_USART_CLK_FREQ); DbgConsole_Printf("SERIAL_USART_CLK_FREQ: %d\n", SERIAL_BOOT_USART_CLK_FREQ) ; USART_WriteBlocking(DEBUG_BOOT_USART, txbuff1, sizeof(txbuff1) - 1); USART_WriteBlocking(SERIAL_BOOT_USART, txbuff2, sizeof(txbuff2) - 1); return 0; } ini_pins 函数: void BOARD_InitPins(void) { const uint32_t port0_pin1_config = (/* Pin is configured as FC0_TXD_SCL_MISO_WS */ IOPCTL_PIO_FUNC1 | /* Disable pull-up / pull-down function */ IOPCTL_PIO_PUPD_DI | /* Enable pull-down function */ IOPCTL_PIO_PULLDOWN_EN | /* Disable input buffer function */ IOPCTL_PIO_INBUF_DI | /* Normal mode */ IOPCTL_PIO_SLEW_RATE_NORMAL | /* Normal drive */ IOPCTL_PIO_FULLDRIVE_DI | /* Analog mux is disabled */ IOPCTL_PIO_ANAMUX_DI | /* Pseudo Output Drain is disabled */ IOPCTL_PIO_PSEDRAIN_DI | /* Input function is not inverted */ IOPCTL_PIO_INV_DI); /* PORT0 PIN1 (coords: G2) is configured as FC0_TXD_SCL_MISO_WS */ IOPCTL_PinMuxSet(IOPCTL, 0U, 1U, port0_pin1_config); const uint32_t port0_pin2_config = (/* Pin is configured as FC0_RXD_SDA_MOSI_DATA */ IOPCTL_PIO_FUNC1 | /* Disable pull-up / pull-down function */ IOPCTL_PIO_PUPD_DI | /* Enable pull-down function */ IOPCTL_PIO_PULLDOWN_EN | /* Enables input buffer function */ IOPCTL_PIO_INBUF_EN | /* Normal mode */ IOPCTL_PIO_SLEW_RATE_NORMAL | /* Normal drive */ IOPCTL_PIO_FULLDRIVE_DI | /* Analog mux is disabled */ IOPCTL_PIO_ANAMUX_DI | /* Pseudo Output Drain is disabled */ IOPCTL_PIO_PSEDRAIN_DI | /* Input function is not inverted */ IOPCTL_PIO_INV_DI); /* PORT0 PIN2 (coords: G4) is configured as FC0_RXD_SDA_MOSI_DATA */ IOPCTL_PinMuxSet(IOPCTL, 0U, 2U, port0_pin2_config); const uint32_t port0_pin15_config = (/* Pin is configured as FC2_TXD_SCL_MISO_WS */ IOPCTL_PIO_FUNC1 | /* Disable pull-up / pull-down function */ IOPCTL_PIO_PUPD_DI | /* Enable pull-down function */ IOPCTL_PIO_PULLDOWN_EN | /* Disable input buffer function */ IOPCTL_PIO_INBUF_DI | /* Normal mode */ IOPCTL_PIO_SLEW_RATE_NORMAL | /* Normal drive */ IOPCTL_PIO_FULLDRIVE_DI | /* Analog mux is disabled */ IOPCTL_PIO_ANAMUX_DI | /* Pseudo Output Drain is disabled */ IOPCTL_PIO_PSEDRAIN_DI | /* Input function is not inverted */ IOPCTL_PIO_INV_DI); /* PORT0 PIN15 (coords: G2) is configured as FC2_TXD_SCL_MISO_WS */ IOPCTL_PinMuxSet(IOPCTL, 0U, 15U, port0_pin15_config); const uint32_t port0_pin16_config = (/* Pin is configured as FC2_RXD_SDA_MOSI_DATA */ IOPCTL_PIO_FUNC1 | /* Disable pull-up / pull-down function */ IOPCTL_PIO_PUPD_DI | /* Enable pull-down function */ IOPCTL_PIO_PULLDOWN_EN | /* Enables input buffer function */ IOPCTL_PIO_INBUF_EN | /* Normal mode */ IOPCTL_PIO_SLEW_RATE_NORMAL | /* Normal drive */ IOPCTL_PIO_FULLDRIVE_DI | /* Analog mux is disabled */ IOPCTL_PIO_ANAMUX_DI | /* Pseudo Output Drain is disabled */ IOPCTL_PIO_PSEDRAIN_DI | /* Input function is not inverted */ IOPCTL_PIO_INV_DI); /* PORT0 PIN16 (coords: G4) is configured as FC2_RXD_SDA_MOSI_DATA */ IOPCTL_PinMuxSet(IOPCTL, 0U, 16U, port0_pin16_config); } board.h的相关部分: /*! @brief The UART to use for debug messages. */ #define BOARD_DEBUG_UART_TYPE kSerialPort_Uart #define BOARD_DEBUG_UART_BASEADDR (uint32_t) USART0 #define BOARD_DEBUG_UART_INSTANCE 0U #define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetFlexCommClkFreq(0U) #define BOARD_DEBUG_UART_FRG_CLK \ (&(const clock_frg_clk_config_t){0, kCLOCK_FrgPllDiv, 255, 0}) /*!< Select FRG0 mux as frg_pll */ #define BOARD_DEBUG_UART_CLK_ATTACH kFRG_to_FLEXCOMM0 #define BOARD_DEBUG_UART_RST kFC0_RST_SHIFT_RSTn #define BOARD_DEBUG_UART_CLKSRC kCLOCK_Flexcomm0 #define BOARD_UART_IRQ_HANDLER FLEXCOMM0_IRQHandler #define BOARD_UART_IRQ FLEXCOMM0_IRQn /*! @brief The UART to use for serial boot. */ #define SERIAL_BOOT_UART_TYPE kSerialPort_Uart #define SERIAL_BOOT_UART_BASEADDR (uint32_t) USART2 #define SERIAL_BOOT_UART_INSTANCE 2U #define SERIAL_BOOT_UART_CLK_FREQ CLOCK_GetFlexCommClkFreq(2U) #define SERIAL_BOOT_UART_FRG_CLK \ (&(const clock_frg_clk_config_t){2, kCLOCK_FrgPllDiv, 255, 0}) /*!< Select FRG0 mux as frg_pll */ #define SERIAL_BOOT_UART_CLK_ATTACH kFRG_to_FLEXCOMM2 #define SERIAL_BOOT_UART_RST kFC2_RST_SHIFT_RSTn #define SERIAL_BOOT_UART_CLKSRC kCLOCK_Flexcomm2 #define SERIAL_BOOT_UART_IRQ_HANDLER FLEXCOMM2_IRQHandler #define SERIAL_BOOT_UART_IRQ FLEXCOMM2_IRQn 代码编译并在板上运行,但我只得到 USART0 的输出。 我还需要什么才能运行第二个 USART? |
|
相关推荐
1个回答
|
|
*************************************************************/#define EXAMPLE_USART_BASEADDR USART2#define EXAMPLE_USART_IRQ FLEXCOMM2_IRQn#define EXAMPLE_USART_IRQHandler FLEXCOMM2_IRQHandler#define EXAMPLE_USART_CLOCK_ATTACH kFRO_HF_to_FLEXCOMM2_CLK#define EXAMPLE_USART_CLOCK_FREQ CLOCK_GetFreq(kCLOCK_Flexcomm2)#define EXAMPLE_USART_TX_PORT 1U#define EXAMPLE_USART_TX_PIN 8U#define EXAMPLE_USART_RX_PORT 1U#define EXAMPLE_USART_RX_PIN 9U/******************************************************************************* * Prototypes ******************************************************************************//*!@brief Initialize the USART module*/static void EXAMPLE_USART_Init(void);/*! @brief USART user callback */void EXAMPLE_USART_Callback(USART_Type *base, usart_handle_t *handle, status_t status, void *userData);/******************************************************************************* * Variables ********************************************************************************/usart_handle_t g_usartHandle;uint8_t g_tipString[] = "Usart polling examplernBoard: MIMXRT600-EVKrn";uint8_t g_rxBuffer[20] = {0};uint8_t g_txBuffer[] = "Usart polling examplern";volatile bool rxBufferEmpty = true;/******************************************************************************* * Code ******************************************************************************/void EXAMPLE_USART_Init(void){ usart_config_t config; USART_GetDefaultConfig(&config); /* set baudrate to 115200 */ config.baudRate_Bps = 115200U; /* Configure USART as a slave */ config.enableRx = true; config.enableTx = true; /* Initialise USART2 */ USART_Init(EXAMPLE_USART_BASEADDR, &config, EXAMPLE_USART_CLOCK_FREQ); USART_TransferCreateHandle(EXAMPLE_USART_BASEADDR, &g_usartHandle, EXAMPLE_USART_Callback, NULL); /* Enable transmission complete interrupt */ USART_EnableInterrupts(EXAMPLE_USART_BASEADDR, kUSART_TxIdleInterruptEnable); NVIC_SetPriority(EXAMPLE_USART_IRQ, 2U); NVIC_EnableIRQ(EXAMPLE_USART_IRQ);}void EXAMPLE_USART_Callback(USART_Type *base, usart_handle_t *handle, status_t status, void *userData){ if (status == kStatus_USART_TxIdle) { txBufferSent = true; }}int main(void){ BOARD_InitPins(); BOARD_InitBootClocks(); BOARD_InitDebugConsole(); EXAMPLE_USART_Init(); PRINTF("Initialized Usart2rn");/* Send the string out. */ USART_WriteBlocking(EXAMPLE_USART_BASEADDR, g_txBuffer, sizeof(g_txBuffer) - 1);while(1){}// Loop forever}void EXAMPLE_USART_IRQHandler(void){ USART_TransferHandleIRQ(EXAMPLE_USART_BASEADDR, &g_usartHandle); }
您需要注意以下几点: 1. 确保您正在使用正确的引脚和端口,例如,示例中使用的引脚是 TX1 和 RX1。 2. 若要使用第二个 USART,请确保已将其连接到正确的引脚和端口,并将其设置为需要使用的 USART 接口。 3. 请确保已正确设置时钟,并将其连接到 Flexcomm 接口。 4. 您需要在示例中添加中断处理程序。确保您已正确启用了相应的中断。 5. 根据应用程序需要,您可能需要使用 DMA 来进行 USART 通信。在这种情况下,您需要正确配置 DMA 控制器,并在初始化函数中添加相应的代码。 |
|
|
|
只有小组成员才能发言,加入小组>>
1914个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36383 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4412 浏览 0 评论
6076 浏览 1 评论
6787 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4229 浏览 0 评论
632浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
628浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
624浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
704浏览 2评论
810浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 11:55 , Processed in 1.312960 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号