HXM1593 发表于 2023-6-25 11:13

移植下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            

wubangmi 发表于 2023-6-25 11:24

第一:PB09没有UART2功能
第二:UART2的超时用的不是Timer02_B

lajfda001 发表于 2023-6-26 10:55

这个库文件,很棒。

sasdfji001 发表于 2023-6-26 11:09

感觉楼主的分享,以后 使用芯片需要仔细看一下这部分。

勇者无惧你和我 发表于 2023-6-26 11:09

感谢楼主的分享,没有想到这部分还是一个坑。

yang377156216 发表于 2023-6-26 11:10

这种简单的初始化配置可以使用 XHCode 配置工具哟,挺方便的。

HXM1593 发表于 2023-6-28 09:54

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 通道

但我还没有调通,尴尬了

wubangmi 发表于 2023-6-28 10:33

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

HXM1593 发表于 2023-6-28 21:23

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)



wubangmi 发表于 2023-6-29 09:24

HXM1593 发表于 2023-6-28 21:23
uart4 改成 uart2,只修改了宏定义,100PIN改了64PIN芯片HD32F460KCTA
jlink的虚拟串口接到UART2,用串口 ...


我上一条的留言,你貌似根本没有看进去呀

georgeliu2016 发表于 2023-7-1 11:57

感谢楼主分享。

HXM1593 发表于 2023-7-2 15:25

wubangmi 发表于 2023-6-29 09:24
我上一条的留言,你貌似根本没有看进去呀

谢谢你!
通了,开心
把两个UART1、2搞乱了,去掉一个单独来调,发现错的地方
页: [1]
查看完整版本: 移植下V3.1的库出现的问题