打印
[技术问答]

HC32L190FCUA 没有PA03引脚,例程如何改串口的引脚?

[复制链接]
920|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lee8871|  楼主 | 2024-7-26 16:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
看了一下,例程用的是:pa2 pa3 但是某些封装没有引出,应该怎么办?怎么改例程?
``` c
void App_PortInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
   
    DDL_ZERO_STRUCT(stcGpioCfg);
   
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  ///<使能GPIO外设时钟门控开关
   
    stcGpioCfg.enDir = GpioDirOut;
    Gpio_Init(GpioPortA,GpioPin2,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortA,GpioPin2,GpioAf1);             ///<配置PA02 为UART1 TX
    stcGpioCfg.enDir = GpioDirIn;
    Gpio_Init(GpioPortA,GpioPin3,&stcGpioCfg);
    Gpio_SetAfMode(GpioPortA,GpioPin3,GpioAf1);             ///<配置PA03 为UART1 RX
}
```

使用特权

评论回复
沙发
wubangmi| | 2024-7-26 16:40 | 只看该作者
换到其他引脚上去,然后按照GPIO引脚功能修改成UART功能

使用特权

评论回复
板凳
lee8871|  楼主 | 2024-7-26 16:44 | 只看该作者
wubangmi 发表于 2024-7-26 16:40
换到其他引脚上去,然后按照GPIO引脚功能修改成UART功能

我看到的例程是这样的:
//串口模块配置
void App_UartCfg(void)
{
    stc_uart_cfg_t  stcCfg;
    stc_uart_baud_t stcBaud;

    DDL_ZERO_STRUCT(stcCfg);
    DDL_ZERO_STRUCT(stcBaud);
   
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE); ///<使能UART1外设时钟门控开关
   
    ///<UART Init
    stcCfg.enRunMode        = UartMskMode3;                 ///<模式3
    stcCfg.enStopBit        = UartMsk1bit;                  ///<1bit停止位
    stcCfg.enMmdorCk        = UartMskDataOrAddr;            ///<多机模式时
    stcCfg.stcBaud.u32Baud  = 9600;                         ///<波特率9600
    stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;              ///<通道采样分频配置
    stcCfg.stcBaud.u32Pclk  = Sysctrl_GetPClkFreq();        ///</<获得外设时钟(PCLK)频率值
    Uart_Init(M0P_UART1, &stcCfg);                          ///<串口初始化
   
    ///<UART中断使能
    Uart_ClrStatus(M0P_UART1,UartRC);                       ///<清接收请求
    Uart_ClrStatus(M0P_UART1,UartTC);                       ///<清接收请求
    Uart_EnableIrq(M0P_UART1,UartTxIrq);                    ///<使能串口接收中断   
    EnableNvic(UART1_3_IRQn, IrqLevel3, TRUE);              ///<系统中断使能

}

这里似乎并没有UART引脚映射相关的功能。
这个要怎么换呢?按说应该是配置一个结构体,填写串口映射的引脚,然后将对应的引脚配置好方向和模式。
现在在初始化中没有找到这个选项的。

您知道怎么改吗?

使用特权

评论回复
地板
wubangmi| | 2024-7-26 17:09 | 只看该作者
lee8871 发表于 2024-7-26 16:44
我看到的例程是这样的:

这里似乎并没有UART引脚映射相关的功能。

第一:你要先确认你要把这个UART口放在那两个GPIO脚上。
第二:你得看你选的两个GPIO脚有没有UART功能,这个你要看用户手册的GPIO章节有个表格,上面列出了所有GPIO对应的功能。
第三:你确定了GPIO后,在例程里改你这个脚踏UART对应的功能是第几个功能就行。
第四:确定你用的是UART0还是1,然后改例程里的UART模块单元。
以上四步走完,UART就已经改完了

使用特权

评论回复
5
xionghaoyun| | 2024-7-27 14:52 | 只看该作者
1.GPIO复用 2.开启对应串口 你把例程看懂再写吧

使用特权

评论回复
6
地瓜patch| | 2024-7-29 21:50 | 只看该作者
lee8871 发表于 2024-7-26 16:44
我看到的例程是这样的:

这里似乎并没有UART引脚映射相关的功能。

这个例程中规中矩,可移植

使用特权

评论回复
7
地瓜patch| | 2024-7-29 21:51 | 只看该作者
更换引脚,实在不行就飞线

使用特权

评论回复
8
lee8871|  楼主 | 2024-7-29 23:07 | 只看该作者
地瓜patch 发表于 2024-7-29 21:51
更换引脚,实在不行就飞线

MCU根本就没有引出GPIO3!
飞线除非把芯片磨开点金丝出来。

使用特权

评论回复
9
lee8871|  楼主 | 2024-7-29 23:08 | 只看该作者

使用特权

评论回复
10
lee8871|  楼主 | 2024-7-29 23:14 | 只看该作者
最后是这么改的: 查这个excel,看到A15的2功能是串口1的RX,于是程序里将GpioPin15, GpioAf2改了,就映射到这个端口了。
GpioAf2就是二功能映射的意思。也就是说GPIOA15脚采用第2种映射。
给后来的指路了。

使用特权

评论回复
11
lee8871|  楼主 | 2024-7-30 01:58 | 只看该作者
地瓜patch 发表于 2024-7-29 21:50
这个例程中规中矩,可移植

不知道你是不是官方例程的贡献者,这个例程真的不好,预见不老少坑了。

1. 首先例程打开文件夹,都是uart命名的,但是MCU有uart1和uart0,打开以后发现所有例程都是uart1的。怎么改UART0不知道,为什么不给一个UART0的例程呢?这样对比两个例程就能理解怎么换串口。并且我现在还不知道两个串口是否是完全一致的。
2. 接着就会遇到大坑,所有例程都是用的9600波特率,你可能会觉得,改数字就行,但是改成115200波特率是不能工作的!,原因查了好久,发现改115200不能用默认的4M时钟,必须从另一个程序把24M时钟打开!请务必出一个115200的例程,不然后面还会坑人的。
3. 所有串口例程都是走GPIOA2和GPIOA3的,但是这个芯片的某些封装没有GPIOA3,不是PCB没画,是芯片没这个引脚!但是例程就一个串口,还选了这么一个引脚,怎么换引脚映射?没有例程演示。好歹出两个不同映射的例程,用户一对比,就能理解怎么用了啊。
4. 最近官网的例程和库下载不了了,点芯片就直接跳404。我还想看看是不是我的例程太旧了,新的直接下载不了。
5. 电路板的外设定义在common里,这个文件:board_stkhc32l19x.h,但这个文件的引用在哪?在driver的头文件,ddl.h里,也就是说,驱动程序需要引用电路板的定义,如果我用自己的电路板,或者有多个电路板定义文件要来回切换,就要每次在驱动里改;驱动升级了,还要进去把电路板定义改回来。这么做耦合肯定是不行的。
6. 例程里没有对printf的支持。上手第一步要先实现printf。

我就做了这么一个串口,上手3天,就遇到这么多问题。这真的能说“中规中矩”吗?

我知道国产的芯片刚刚出来,很多地方都不完善,咱们用国产芯片,就是为了用出问题,完善问题。这需要我们开发者和芯片供应商共同的努力!

希望你能够看到这些不完善的地方。




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝