[应用方案] 新塘M451 UART3与PWM1配置易冲突

[复制链接]
 楼主| tinnu 发表于 2020-4-11 21:25 | 显示全部楼层 |阅读模式
对UART3(D12 D13)如下配置时:

  1. void UART3_Init()

  2. {

  3.     /*---------------------------------------------------------------------------------------------------------*/

  4.     /* Init UART                                                                                               */

  5.     /*---------------------------------------------------------------------------------------------------------*/

  6.     /* Reset UART module */

  7.     SYS_ResetModule(UART3_RST);



  8.     /* Configure UART0 and set UART0 baud rate */

  9.     UART_Open(UART3, 115200);



  10.     /* Enable UART RDA/THRE/Time-out interrupt */

  11.     UART_EnableInt(UART3, (UART_INTEN_RDAIEN_Msk));

  12. }

如果配置PWM1:

  1. void PWM1_FunctionInit(void)

  2. {

  3. //        PWM1_ClockInit();

  4. //        PWM1_IOInit();

  5.         /*

  6.                 Configure PWM0 channel 0 init period and duty.

  7.                 Period is PLL / (prescaler * (CNR + 1))

  8.                 Duty ratio = (CMR + 1) / (CNR + 1)

  9.                 Period = 72 MHz / (2 * (199 + 1)) = 180000 Hz

  10.                 Duty ratio = (99 + 1) / (199 + 1) = 50%

  11.         */

  12.         // PWM0 channel 0 frequency is 180000Hz, duty 50%,

  13.         PWM_ConfigOutputChannel(PWM1, 2, 50, 20);

  14.         PWM_ConfigOutputChannel(PWM1, 3, 50, 20);



  15.         // Enable output of PWM0 channel 0

  16.         PWM_EnableOutput(PWM1, PWM_CH_2_MASK);

  17.         PWM_EnableOutput(PWM1, PWM_CH_3_MASK);



  18.         //Start

  19.         PWM_Start(PWM1, PWM_CH_2_MASK);

  20.         PWM_Start(PWM1, PWM_CH_3_MASK);

  21. }

会导致UART3产生一次假中断,发生了中断,进入了服务函数,但没有接收任何数据。

如果配置
PWM1_IOInit();

的话,还会导致UART3出BUG,无法发送接收:

  1. void PWM1_IOInit(void)

  2. {

  3.         //retarget, this is unsafe

  4.         SYS->GPD_MFPH = SYS_GPD_MFPH_PD15MFP_PWM1_CH3 | SYS_GPD_MFPH_PD14MFP_PWM1_CH2;

  5. }

以本人拙见认为这是由于D14、D15同时也是UART的nRTS、nCTS脚,芯片逻辑设计有BUG,导致PWM1配置会影响UART,因此电路板设置应尽可能避开把UART3和PWM1同时使用的情况。(我测试的程序还同时使用了UART0,但没有产生任何的问题)
新塘UART3 BUG.png

antusheng 发表于 2020-4-11 22:11 | 显示全部楼层
配置完,再对D14,D15设置一次,作为普通IO。
heisexingqisi 发表于 2020-4-12 13:53 | 显示全部楼层
官方出的有个调试工具
heisexingqisi 发表于 2020-4-12 13:54 | 显示全部楼层
http://www.nuvoton.com.cn/resource-download.jsp?tp_GUID=SW1320200221181935
heisexingqisi 发表于 2020-4-12 13:54 | 显示全部楼层
http://www.nuvoton.com.cn/tool-and-software/software-development-tool/nutool/
heisexingqisi 发表于 2020-4-12 17:06 | 显示全部楼层
在主函数里初始化顺序调整一下试试看。
heisexingqisi 发表于 2020-4-12 17:06 | 显示全部楼层
先初始化串口,再初始化PWM
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

72

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部