[其他]

F460的库,请问官方验证了吗?

[复制链接]
836|6
手机看帖
扫描二维码
随时随地手机跟帖
dontium|  楼主 | 2024-5-29 22:20 | 显示全部楼层 |阅读模式
ST, tc, pi, ni, TI, RT
       初次使用HC32F460,看了好久小学语言水平写的手册,总算掌握了部分内容。编写程序试机,然而怎么也不能工作。
没办法就使用官方的GPIO例程,对端口控制,---- 竟然达不到目的!

------ 当然怀疑是板子问题,查呀,查呀! 查封装、查电路设计,查PCB布板,…… 查了一个遍,都没发现有关键问题!

       后来在DEBUG下观察寄存器,发现端口输出正常,百思不得其解,随即把端口输出允许点了一下,马上就正常了!
最后在程序中加了一句:
                   M4_PORT->POERE                                = 0x0100;

程序正常工作。达到了预期目的。

/********************************************************************************************/
分析官网提供的hc32f460_ddl_Rev2.2.0.zip文件中的GPIO例程,原样不动地提供如下:

int32_t main(void)
{
    stc_port_init_t stcPortInit;

    /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcPortInit);

    stcPortInit.enPinMode = Pin_Mode_Out;
    stcPortInit.enExInt = Enable;
    stcPortInit.enPullUp = Enable;

    /* LED0 Port/Pin initialization */
    PORT_Init(LED0_PORT, LED0_PIN, &stcPortInit);

    /* LED1 Port/Pin initialization */
    PORT_Init(LED1_PORT, LED1_PIN, &stcPortInit);

    /* LED2 Port/Pin initialization */
    PORT_Init(LED2_PORT, LED2_PIN, &stcPortInit);

    /* LED3 Port/Pin initialization */
    PORT_Init(LED3_PORT, LED3_PIN, &stcPortInit);

    while(1)
    {
        LED0_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        LED1_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        LED2_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        LED3_TOGGLE();
        Ddl_Delay1ms(DLY_MS);
        /* de-init if necessary */
        //PORT_DeInit();
    };
}


在while前,只有一个PORT_Init函数,我们也把它提供出来(执行部分):
            PCRx = (stc_port_pcr_field_t *)((uint32_t)(&M4_PORT->PCRA0) +      \
                                            enPort * 0x40ul + u8PinPos * 0x04ul);
            PFSRx = (stc_port_pfsr_field_t *)((uint32_t)(&M4_PORT->PFSRA0) +   \
                                              enPort * 0x40ul + u8PinPos * 0x04ul);

            /* Input latch function setting */
            PCRx->LTE = pstcPortInit->enLatch;

            /* External interrupt input enable setting */
            PCRx->INTE = pstcPortInit->enExInt;

            /* In_Out invert setting */
            PCRx->INVE = pstcPortInit->enInvert;

            /* Pin pull-up setting */
            PCRx->PUU = pstcPortInit->enPullUp;

            /* CMOS/OD output setting */
            PCRx->NOD = pstcPortInit->enPinOType;

            /* Pin drive mode setting */
            PCRx->DRV = pstcPortInit->enPinDrv;

            /* Pin mode setting */
            switch (pstcPortInit->enPinMode)
            {
                case Pin_Mode_In:
                    PCRx->DDIS  = 0u;
                    PCRx->POUTE = 0u;
                break;
                case Pin_Mode_Out:
                    PCRx->DDIS  = 0u;
                    PCRx->POUTE = 1u;
                break;
                case Pin_Mode_Ana:
                    PCRx->DDIS  = 1u;
                break;
                default:
                break;
            }
            /* Sub function enable setting */
            PFSRx->BFE = pstcPortInit->enPinSubFunc;


前面两句,是分别为PCRx 、PFSRx 赋值作准备(两个寄存器地址)。接下来的程序也仅对两个寄存器操作。而LEDx_TOGGLE也仅对翻转寄存器操作。没有牵扯到其它寄存器。

        而460手册的POERx、PCRxy说明,输出需要将相应位设置为允许。

但在例程中,怎么也找不到对这两个(或一个)寄存器的操作。

/-----------------------------------------------------------------------------------------------------------------------------/

我现在纳闷,要么是手册错了?要么是例程错了?

-----------------或者我理解不到位,请厂家或牛人斧正!



使用特权

评论回复
wubangmi| | 2024-5-30 09:07 | 显示全部楼层
789516657d09d747d1.png

例程和手册都没错,以图论事。

另外小华官网这个例程的库都已经升级到了v3.2.0了,与时俱进去下最新的库吧。

话说老库肯定有一些bug存在,但并不是你说的这个。

使用特权

评论回复
dontium|  楼主 | 2024-5-30 10:29 | 显示全部楼层
wubangmi 发表于 2024-5-30 09:07
例程和手册都没错,以图论事。

另外小华官网这个例程的库都已经升级到了v3.2.0了,与时俱进去下最新的库 ...

这是我刚看到的官网上的:
b6.png
最高版本2.2.

你从哪得到3.2版本的?分享一下吧。谢谢

使用特权

评论回复
dontium|  楼主 | 2024-5-30 10:34 | 显示全部楼层
wubangmi 发表于 2024-5-30 09:07
例程和手册都没错,以图论事。

另外小华官网这个例程的库都已经升级到了v3.2.0了,与时俱进去下最新的库 ...

我在实验中发现,PCR虽然设置了,但还是不能输出到端口,而设置了POER后才可以的。
我说的是端口初化中没有提到POER,虽然它们的位的命名都一样。
b7.png
是这个寄存器!

实验中发现,这个寄存器不设置,虽然端口寄存器中的数据可以改变,但端口外输出却没有变化,呈高阻。

使用特权

评论回复
wubangmi| | 2024-5-30 11:05 | 显示全部楼层
dontium 发表于 2024-5-30 10:29
这是我刚看到的官网上的:

最高版本2.2.

www.xhsc.com.cn


今天小华官网奔溃了

使用特权

评论回复
dontium|  楼主 | 2024-5-30 11:09 | 显示全部楼层
本帖最后由 dontium 于 2024-5-30 11:11 编辑

https://www.hdsc.com.cn/Category83-1491
这个可打开。原来我用的东西,是在华大网上下载的。

使用特权

评论回复
wubangmi| | 2024-5-30 11:13 | 显示全部楼层
dontium 发表于 2024-5-30 10:34
我在实验中发现,PCR虽然设置了,但还是不能输出到端口,而设置了POER后才可以的。
我说的是端口初化中没 ...

翻一下用户手册GPIO章节的GPIO输出部分吧
123.jpg

使用特权

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

本版积分规则

个人签名:官向官来民向民,穷人向的是穷人

146

主题

1165

帖子

10

粉丝