This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:GPIO 问题:无法设置某些输出引脚

Guru**** 2425360 points
Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/614703/tm4c1294ncpdt-gpio-issue-impossible-to-set-some-output-pins

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

尊敬的技术支持团队:

在 EK-TM4C1294XL Launchpad 上、我很难用作 GPIO PM1、PG1、PK4和 PK5引脚。

我对 PM0引脚使用正确的代码:

#define VO_SER_GPIO_PORT_base GPIO_PORTM_BASE
#define VO_SER GPIO_PIN_0
#define VO_SRCLK_GPIO_PORT_base GPIO_PORTG_base
#define VO_SRCLK GPIO_PIN_1
#define VO_RCLK_GPIO_PORT_base GPIO_PORTK_base
#define VO_RCLK GPIO_PIN_4
#define VO_OE_GPIO_PORT_base GPIO_PORTK_base
#define VO_OE GPIO_PIN_5
#define VO_SRCLR_GPIO_PORT_base GPIO_PORTM_BASE
#define VO_SRCLR GPIO_PIN_1

/*此处的系统时钟初始化*/

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);

MAP_GPIOPinTypeGPIOOutput (VO_SER_GPIO_PORT_BASE、VO_SER);

MAP_GPIOPinTypeGPIOOutput (VO_SRCLK_GPIO_PORT_BASE、VO_SRCLK);

MAP_GPIOPinTypeGPIOOutput (VO_RCLK_GPIO_PORT_BASE、VO_RCLK);

MAP_GPIOPinTypeGPIOOutput (VO_OE_GPIO_PORT_BASE、VO_OE);

MAP_GPIOPinTypeGPIOOutput (VO_SRCLR_GPIO_PORT_BASE、VO_SRCLR);

MAP_GPIOPinWrite (VO_SER_GPIO_PORT_BASE、VO_SER、1);

MAP_GPIOPinWrite (VO_SRCLK_GPIO_PORT_BASE、VO_SRCLK、1);

MAP_GPIOPinWrite (VO_RCLK_GPIO_PORT_BASE、VO_RCLK、1);

MAP_GPIOPinWrite (VO_OE_GPIO_PORT_BASE、VO_OE、1);

MAP_GPIOPinWrite (VO_SRCLR_GPIO_PORT_BASE、VO_SRCLR、1);

 

使用该代码时、仅 PM0引脚上对应的数据寄存器位(GPIODATA 寄存器的位0)能够正常工作。

您有什么想法可以帮助我吗?

此致

Sylvain

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sylvain、

    这是错误的:

    MAP_GPIOPinWrite (VO_SRCLK_GPIO_PORT_BASE、VO_SRCLK、1);

    GPIOPinWrite 上的第三个参数应为掩码、其中包含要写入第二个参数定义的引脚的位。 关闭不是"0"、打开不是"1"。  值"1"只对应于 GPIO_PIN_0。

    换言之、始终重复该引脚:

    MAP_GPIOPinWrite (VO_SRCLK_GPIO_PORT_BASE、VO_SRCLK、VO_SRCLK);

    布鲁诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然参数2和3之间的"重复"参数值将起作用、但不需要这样做、"始终"。    (除非寻求"木工隧道")

    相反、在参数2和3中采用"位位置值"(范围可能为"0至128"(对于单个位))也有效-并且在要设置多个位(尤其是当所有位)时避免了函数的"无限"扩展!   (唤醒我-当任务完成时)

    我认为第二个参数是"掩码"(控制哪些 GPIO 引脚(可能)被输出-因此是"掩码")、而该参数3是"用 param 表示反射的"。 2"-将这些"公共"位输出到两个参数:2和3。   (因此两个参数:2和3的范围可能为0 - 255、w/255 (可能能够打开端口的所有位...而"0"会使整个端口静默。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更实用的方法:

    参数2:此命令允许更改的引脚的掩码。

    假设 GPIO_PIN_2 + GPIO_PIN_3 (00001100)

    参数3:包含参数2上这些引脚假定值(低电平或高电平)的8位集合。

    假设 GPIO_PIN_3 + GPIO_PIN_7 (10001000)

    在这种情况下、Write 命令将 GPIO_PIN_2关闭/低电平、并将 GPIO_PIN_3打开/高电平。 引脚7存在于 Param3的掩码中、但"不允许触碰"、因为它不在 Param2上、因此它不会更改先前的状态。

    如果是懒惰的方法、这将开启2个引脚、而不会思考:

    #define GPIO_PIN_TONON 0xFF //(11111111)
    GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_2 + GPIO_PIN_3、GPIO_PIN_TONON); 

    不确定它有多有用、但是、嗯...

    布鲁诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我坚持认为(只有)是一个比喻。 2用作"掩码"。

    作为理由-考虑帕拉姆的情况。 2为"0xFF"。 这样(可能)会启用包含在 param 中的所有位。 3.  现在--应该是教区。 2更改为"0xFE"-参数。 3、"无法设置位0"、即使在 param 时也是如此。 3被载入"0xFF"。    (因此,在法律上和令人信服的上,是一个比喻。 3作为掩码失败!)

    参数 2为显性状态-代码审查应表明、"只有那些由 param 寻址的位。 2"-在输出时"被考虑"-当它们显示在参数中时。 3.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据手动参数、param 2是您所说的掩码、param 3是值。

    但是、尽管如此、我发现在很大程度上都不使用完整值、剪切和粘贴效果相当有效。 即使在不使用整组位或一起的情况下、我也不会使用裸0xFF。

    #define All_port_bits_on (0xFFu) 

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢-这里有一个名字叫"Param. 3 (The) Mask"-然后移至(两者) 2和3 -但(仅) param 2 -扮演关键角色...

    我们不需要"手动"(或胸卡!)  (笑声)  (或"N/C" MCU 引脚-麻烦!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的所有人:

    感谢您的帮助、我设法正确驱动 GPIO 引脚。

    我读取用户的 Manuel 太快了,抱歉!

    此致、

    Sylvain

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到,在以前的解释中,字词掩码的应用不当,现在已对其进行了编辑。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    回复:"来到... 注意"-可以更好地描述为"注意的对象是..." (正确归属)
    注意收到(过去)验证(您应该得到!)后的帖子 继续 Param 的(错误的)索赔。 3作为"掩膜"-这不是!