RK312X设备树修改:UART2转普通串口调试

版权申诉
5星 · 超过95%的资源 1 下载量 10 浏览量 更新于2024-09-09 收藏 939B TXT 举报
"rk312x_uart2_to_normal_uart.txt 调试串口转普通串口" 在嵌入式系统开发中,串口(UART,通用异步收发传输器)是常用的通信接口,用于设备之间的数据传输。这个文档似乎涉及的是在基于RK312X处理器的平台上,将调试串口(通常用于开发和诊断)转换为普通串口,以便进行更常规的数据通信任务。 在给定的文件中,我们看到两个差异比较(diff)的段落,分别针对`rk3126-86v.dts`和`rk312x-sdk.dtsi`两个设备树源文件。设备树(Device Tree)是一种在嵌入式Linux系统中描述硬件结构的数据结构,它允许内核动态地配置硬件资源。 在第一个 diff 中,可以看到`rk3126-86v.dts`文件中对`uart2`节点的修改。原本的`status="disabled";`被更改为`status="okay";`,这意味着打开了UART2的使能状态,使其可以正常工作。此外,还添加了`dma-names="!tx","!rx";`和`pinctrl-0=<&uart2_xfer>;`,这分别指定了UART2的DMA传输名称(非TX和RX)以及引脚控制,表明UART2现在可以进行DMA传输,并且其引脚配置已设置为传输模式。 在第二个 diff 中,针对`rk312x-sdk.dtsi`,`fiq-debugger`的`status`从`"okay"`更改为`"disabled"`。这可能意味着调试串口功能被禁用,因为通常在开发环境中,调试串口会启用FIQ(快速中断请求)调试功能,而在将串口转为普通用途时,这种高级调试功能可能不再需要。 调试串口通常具有较高的优先级和特殊的配置,例如更高的波特率、中断优先级等,而普通串口则可能用于连接外围设备如串行打印机、GPS模块等,需要更稳定、标准的配置。通过这样的转换,开发者可以确保UART2作为普通串口使用时,其配置适应于常规通信需求,而不是特定的调试环境。 在实际操作中,调整这些配置可能涉及到更新设备树、重新编译内核、烧录固件等一系列步骤。确保在修改后进行测试,验证串口通信的稳定性、速度和兼容性,以确保其满足预期的应用需求。 这个文档提供的信息描述了如何在基于RK312X的系统上,通过设备树配置将调试串口(UART2)转变为一个普通的、可用于一般通信任务的串口。这涉及到改变UART2的状态、配置DMA和引脚控制,同时可能关闭专门的调试功能。这一过程对于嵌入式系统的开发者来说是至关重要的,因为它允许他们灵活地利用硬件资源来满足不同场景的需求。

怎么使用这个函数初始化串口3HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef huart) { / Check the UART handle allocation / if (huart == NULL) { return HAL_ERROR; } / Check the parameters / if (huart->Init.HwFlowCtl != UART_HWCONTROL_NONE) { / The hardware flow control is available only for USART1, USART2, USART3 and USART6. Except for STM32F446xx devices, that is available for USART1, USART2, USART3, USART6, UART4 and UART5. / assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance)); assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); } else { assert_param(IS_UART_INSTANCE(huart->Instance)); } assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); if (huart->gState == HAL_UART_STATE_RESET) { / Allocate lock resource and initialize it / huart->Lock = HAL_UNLOCKED; #if (USE_HAL_UART_REGISTER_CALLBACKS == 1) UART_InitCallbacksToDefault(huart); if (huart->MspInitCallback == NULL) { huart->MspInitCallback = HAL_UART_MspInit; } / Init the low level hardware / huart->MspInitCallback(huart); #else / Init the low level hardware : GPIO, CLOCK / HAL_UART_MspInit(huart); #endif / (USE_HAL_UART_REGISTER_CALLBACKS) / } huart->gState = HAL_UART_STATE_BUSY; / Disable the peripheral / __HAL_UART_DISABLE(huart); / Set the UART Communication parameters / UART_SetConfig(huart); / In asynchronous mode, the following bits must be kept cleared: - LINEN and CLKEN bits in the USART_CR2 register, - SCEN, HDSEL and IREN bits in the USART_CR3 register./ CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); / Enable the peripheral / __HAL_UART_ENABLE(huart); / Initialize the UART state */ huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; return HAL_OK; }

2023-05-24 上传