移植下V3.1的库出现的问题
第一次使用HD32F460KCTA官网下载了V3.1库,需要使用UART2,板已经画好了。选UART + DMA 例程
在库目录直接修改芯片,更换UART4 为UART2
SW仿真接口,用JLINK的自带串口跳线到UART2观察数据,串口助手收发没反应,
哪位高手,帮助指点一下,谢谢
main.c 的50--123行微改动
/* DMA definition */
#define RX_DMA_UNIT (CM_DMA1)
#define RX_DMA_CH (DMA_CH0)
#define RX_DMA_FCG_ENABLE() (FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1, ENABLE))
#define RX_DMA_TRIG_SEL (AOS_DMA1_0)
//#define RX_DMA_TRIG_EVT_SRC (EVT_SRC_USART4_RI)
#define RX_DMA_TRIG_EVT_SRC (EVT_SRC_USART2_RI)
#define RX_DMA_RECONF_TRIG_SEL (AOS_DMA_RC)
#define RX_DMA_RECONF_TRIG_EVT_SRC (EVT_SRC_AOS_STRG)
#define RX_DMA_TC_INT (DMA_INT_TC_CH0)
#define RX_DMA_TC_FLAG (DMA_FLAG_TC_CH0)
#define RX_DMA_TC_IRQn (INT000_IRQn)
#define RX_DMA_TC_INT_SRC (INT_SRC_DMA1_TC0)
#define TX_DMA_UNIT (CM_DMA2)
#define TX_DMA_CH (DMA_CH0)
#define TX_DMA_FCG_ENABLE() (FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA2, ENABLE))
#define TX_DMA_TRIG_SEL (AOS_DMA2_0)
//#define TX_DMA_TRIG_EVT_SRC (EVT_SRC_USART4_TI)
#define TX_DMA_TRIG_EVT_SRC (EVT_SRC_USART2_TI)
#define TX_DMA_TC_INT (DMA_INT_TC_CH0)
#define TX_DMA_TC_FLAG (DMA_FLAG_TC_CH0)
#define TX_DMA_TC_IRQn (INT001_IRQn)
#define TX_DMA_TC_INT_SRC (INT_SRC_DMA2_TC0)
/* Timer0 unit & channel definition */
#define TMR0_UNIT (CM_TMR0_2)
#define TMR0_CH (TMR0_CH_B)
#define TMR0_FCG_ENABLE() (FCG_Fcg2PeriphClockCmd(FCG2_PERIPH_TMR0_2, ENABLE))
/* USART RX/TX pin definition */
//#define USART_RX_PORT (GPIO_PORT_B) /* PB9: USART4_RX */
//#define USART_RX_PIN (GPIO_PIN_09)
//#define USART_RX_GPIO_FUNC (GPIO_FUNC_37)
#define USART_RX_PORT
第一:PB09没有UART2功能
第二:UART2的超时用的不是Timer02_B 这个库文件,很棒。 感觉楼主的分享,以后 使用芯片需要仔细看一下这部分。 感谢楼主的分享,没有想到这部分还是一个坑。 这种简单的初始化配置可以使用 XHCode 配置工具哟,挺方便的。 wubangmi 发表于 2023-6-25 11:24
第一:PB09没有UART2功能
第二:UART2的超时用的不是Timer02_B
端口用的是
/* USART RX/TX pin definition */
//#define USART_RX_PORT (GPIO_PORT_B) /* PB9: USART4_RX */
//#define USART_RX_PIN (GPIO_PIN_09)
//#define USART_RX_GPIO_FUNC (GPIO_FUNC_37)
#define USART_RX_PORT (GPIO_PORT_A) /* PC11: USART2_RX */
#define USART_RX_PIN (GPIO_PIN_11)
#define USART_RX_GPIO_FUNC (GPIO_FUNC_33)
//#define USART_TX_PORT (GPIO_PORT_E) /* PE6: USART4_TX */
//#define USART_TX_PIN (GPIO_PIN_06)
//#define USART_TX_GPIO_FUNC (GPIO_FUNC_36)
#define USART_TX_PORT (GPIO_PORT_A) /* PC10: USART2_TX */
#define USART_TX_PIN (GPIO_PIN_10)
#define USART_TX_GPIO_FUNC (GPIO_FUNC_32)
定时器确实有错:
TIMEOUT 计数器采用 Timer0 模块的计数器,具体对应关系如下:
USART1:Timer0 Unit1 A 通道
USART2:Timer0 Unit1 B 通道
USART3:Timer0 Unit2 A 通道
USART4:Timer0 Unit2 B 通道
但我还没有调通,尴尬了 HXM1593 发表于 2023-6-28 09:54
端口用的是
/* USART RX/TX pin definition */
//#define USART_RX_PORT (GPIO_PORT_B ...
如果你用的是UART1,那么你的GPIO部分配置没有错,抛开超时接收部分代码,你应该能收到数据。
但是你说没调通,那么你应该用的是UART2,此时你的GPIO功能应该是36和37,而不是32和33 wubangmi 发表于 2023-6-28 10:33
如果你用的是UART1,那么你的GPIO部分配置没有错,抛开超时接收部分代码,你应该能收到数据。
但是你说没调 ...
uart4 改成 uart2,只修改了宏定义,100PIN改了64PIN芯片HD32F460KCTA
jlink的虚拟串口接到UART2,用串口助手收发观察,没有反应;
V3.1的uart+dma例程
超时定时器换成了TIME01B
/* DMA definition */
#define RX_DMA_UNIT (CM_DMA1)
#define RX_DMA_CH (DMA_CH0)
#define RX_DMA_FCG_ENABLE() (FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA1, ENABLE))
#define RX_DMA_TRIG_SEL (AOS_DMA1_0)
//#define RX_DMA_TRIG_EVT_SRC (EVT_SRC_USART4_RI)
#define RX_DMA_TRIG_EVT_SRC (EVT_SRC_USART2_RI)
#define RX_DMA_RECONF_TRIG_SEL (AOS_DMA_RC)
#define RX_DMA_RECONF_TRIG_EVT_SRC (EVT_SRC_AOS_STRG)
#define RX_DMA_TC_INT (DMA_INT_TC_CH0)
#define RX_DMA_TC_FLAG (DMA_FLAG_TC_CH0)
#define RX_DMA_TC_IRQn (INT000_IRQn)
#define RX_DMA_TC_INT_SRC (INT_SRC_DMA1_TC0)
#define TX_DMA_UNIT (CM_DMA2)
#define TX_DMA_CH (DMA_CH0)
#define TX_DMA_FCG_ENABLE() (FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA2, ENABLE))
#define TX_DMA_TRIG_SEL (AOS_DMA2_0)
//#define TX_DMA_TRIG_EVT_SRC (EVT_SRC_USART4_TI)
#define TX_DMA_TRIG_EVT_SRC (EVT_SRC_USART2_TI)
#define TX_DMA_TC_INT (DMA_INT_TC_CH0)
#define TX_DMA_TC_FLAG (DMA_FLAG_TC_CH0)
#define TX_DMA_TC_IRQn (INT001_IRQn)
#define TX_DMA_TC_INT_SRC (INT_SRC_DMA2_TC0)
/* Timer0 unit & channel definition */
//#define TMR0_UNIT (CM_TMR0_2)
//#define TMR0_CH (TMR0_CH_B)
//#define TMR0_FCG_ENABLE() (FCG_Fcg2PeriphClockCmd(FCG2_PERIPH_TMR0_2, ENABLE))
#define TMR0_UNIT (CM_TMR0_1)
#define TMR0_CH (TMR0_CH_B)
#define TMR0_FCG_ENABLE() (FCG_Fcg2PeriphClockCmd(FCG2_PERIPH_TMR0_1, ENABLE))
/* USART RX/TX pin definition */
//#define USART_RX_PORT (GPIO_PORT_B) /* PB9: USART4_RX */
//#define USART_RX_PIN (GPIO_PIN_09)
//#define USART_RX_GPIO_FUNC (GPIO_FUNC_37)
#define USART_RX_PORT (GPIO_PORT_C) /* PC11: USART2_RX */
#define USART_RX_PIN (GPIO_PIN_11)
#define USART_RX_GPIO_FUNC (GPIO_FUNC_33)
//#define USART_TX_PORT (GPIO_PORT_E) /* PE6: USART4_TX */
//#define USART_TX_PIN (GPIO_PIN_06)
//#define USART_TX_GPIO_FUNC (GPIO_FUNC_36)
#define USART_TX_PORT (GPIO_PORT_C) /* PC10: USART2_TX */
#define USART_TX_PIN (GPIO_PIN_10)
#define USART_TX_GPIO_FUNC (GPIO_FUNC_32)
/* USART unit definition */
//#define USART_UNIT (CM_USART4)
//#define USART_FCG_ENABLE() (FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_USART4, ENABLE))
#define USART_UNIT (CM_USART2)
#define USART_FCG_ENABLE() (FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_USART2, ENABLE))
/* USART baudrate definition */
#define USART_BAUDRATE (9600UL)//(115200UL)
/* USART timeout bits definition */
#define USART_TIMEOUT_BITS (2000U)
/* USART interrupt definition */
#define USART_TX_CPLT_IRQn (INT002_IRQn)
//#define USART_TX_CPLT_INT_SRC (INT_SRC_USART4_TCI)
#define USART_TX_CPLT_INT_SRC (INT_SRC_USART2_TCI)
#define USART_RX_ERR_IRQn (INT003_IRQn)
//#define USART_RX_ERR_INT_SRC (INT_SRC_USART4_EI)
#define USART_RX_ERR_INT_SRC (INT_SRC_USART2_EI)
//#define USART_RX_TIMEOUT_IRQn (INT004_IRQn)
//#define USART_RX_TIMEOUT_INT_SRC (INT_SRC_USART4_RTO)
#define USART_RX_TIMEOUT_IRQn (INT004_IRQn)
#define USART_RX_TIMEOUT_INT_SRC (INT_SRC_USART2_RTO)
HXM1593 发表于 2023-6-28 21:23
uart4 改成 uart2,只修改了宏定义,100PIN改了64PIN芯片HD32F460KCTA
jlink的虚拟串口接到UART2,用串口 ...
我上一条的留言,你貌似根本没有看进去呀
感谢楼主分享。 wubangmi 发表于 2023-6-29 09:24
我上一条的留言,你貌似根本没有看进去呀
谢谢你!
通了,开心
把两个UART1、2搞乱了,去掉一个单独来调,发现错的地方
页:
[1]