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.

[参考译文] TM4C1230H6PM:CAN##39;无法切换 GPIO 引脚

Guru**** 2530180 points
Other Parts Discussed in Thread: TM4C1230H6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455575/tm4c1230h6pm-can-t-able-to-toggle-the-gpio-pin

器件型号:TM4C1230H6PM

工具与软件:

您好!!

我正在我的项目中使用 TM4C1230H6PM 控制器、我将使用 PB1 (引脚编号46)作为输出引脚并尝试切换该引脚、但即使试图使该引脚处于高电平或低电平的趋势也不会切换。 问题可能是什么??? 我检查了其他引脚 PB2和 PB3、其发生方式与端口相同、我只能切换 PB0引脚。 下面是我的代码、请看一下、如果有任何更改、请为我提供建议。

#include "main.h"

int Index = 1;
int count;
int check_release,relese_couter;	
extern uint8_t rev_data[3];
int value;
#define GNSS_OFF "GF0"
#define GNSS_ON "GF1"
#define SYNC_OFF "SW0"
#define SYNC_ON "SW1"
#define HOLD "HLD"

void Keypad_Init(void)
{
	ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //LED
	ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
	ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
	ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
	
 //  This is using for the PD7 Pin
	HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
	HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 0x80;
	HWREG(GPIO_PORTD_BASE + GPIO_O_AFSEL) &= 0x80;
	HWREG(GPIO_PORTD_BASE + GPIO_O_DEN) |= 0x80;
	HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0;
/*
	HWREG(GPIO_PORTB_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
	HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) &= ~(1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_AMSEL) &= ~(1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_DEN) |= (1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_DIR) |= (1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_ODR) &= ~(1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_PUR) |= (1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_PDR) &= ~(1 << 1);
	HWREG(GPIO_PORTB_BASE + GPIO_O_LOCK) = 0;
*/
									/******* KEYPAD PB *********/
	ROM_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0);
	ROM_GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPD);
	
	ROM_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1);
	ROM_GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_3, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPD);
	
	
	ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,0);
	delay(1000);
    ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,1);
	
	

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

    您好!

     我看到您的以下代码行将 PB1设置为高电平存在一个问题。 在您的代码中、您实际上是在尝试将 PB0 (而不是 PB1)设置为高电平。 请注意、位0用于 PB0、位1用于 PB1、BI2用于 PB2、以此类推。 若要将 PB1设置为高电平、需要改为将值设置为0x2、而不是像您的值那样设置为1。 因此、最好使用库中提供的宏而不是原始值。 例如、要将 PB1设置为高电平、您可以写入  ROM_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_1、GPIO_PIN_1)。 要将 PB2设置为高电平 、您需要写入 ROM_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_2、GPIO_PIN_2)。 这样写,你将消除粗心大意的错误。  

      ROM_GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_1);