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.

[参考译文] TM4C123GH6PM:TM4C123G launchpad 上的 Pb5不工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/604685/tm4c123gh6pm-pb5-on-tm4c123g-launchpad-not-working

器件型号:TM4C123GH6PM

我目前正在项目中使用多个 GPIO、两个 SSI 通道和两个 I2C 通道。  直到我添加了 PB5作为 GPIO 输出来控制 ADC CS 引脚为止、一切都进展顺利。  我在 Booster Pack J1-2的引脚上有一个示波器、输出始终为高电平。  下面是设置 GPIO 的代码片段。  我已经三重检查了引脚分配冲突、在软件中找不到任何冲突。  如果我在查看底部的同时单步执行、则引脚输出永远不会切换。 它只是保持高电平。  有什么想法吗?  我觉得我缺少了一些明显的东西、但我无法使它正常工作、我花了比我希望更多的时间。

谢谢!

void GpioInit (void){
  //启用以下 GPIO 引脚:
  // PE1 -用于4kHz 环路的定时器测试。  无战术功能。
  // PD6 -用于控制 AZ ADC 上的* CS 线路。
  // PC7 -用于控制 EL ADC 上的*CS 线路。
  ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); //启用 GPIO A
  ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); //启用 GPIO B
  ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC); //启用 GPIO C
  ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); //启用 GPIO D
  ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); //启用 GPIO E
  SysCtlDelay (500);
  ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_3);//将 PA3配置为 GPIO 输出。
  ROM_GPIOPinTypeGPIOOutput (GPIO_PORTB_BASE、GPIO_PIN_5);//将 PB5配置为 GPIO 输出。
  ROM_GPIOPinTypeGPIOOutput (GPIO_PORTC_BASE、GPIO_PIN_7);//将 PC7配置为 GPIO 输出。
  ROM_GPIOPinTypeGPIOOutput (GPIO_PORTD_base、GPIO_PIN_6);//将 PD6配置为 GPIO 输出。
  ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5);//将 PE1/PE4/PE5配置为 GPIO 输出。
  ROM_GPIOPinTypeGPIOInput (GPIO_PORTD_BASE、GPIO_PIN_1);
  ROM_GPIOPinTypeGPIOInput (GPIO_PORTD_BASE、GPIO_PIN_2);
  ROM_SysCtlDelay (500); //延迟几个时钟周期以允许更改在更改状态之前应用。
  //初始化 ADC *CS 引脚高电平输出。  CS 为低电平有效。
  //使用直接寄存器写入(DMA)进行 GPIO 控制以最大限度地减少延迟。
  GPIO_PORta_data_R |= GPIO_PIN_3;
  GPIO_PORTB_DATA_R |= GPIO_PIN_5;
  GPIO_PORTC_DATA_R |= GPIO_PIN_7;
  GPIO_PORTD_DATA_R |= GPIO_PIN_6;
  GPIO_Porte DATA_R |= GPIO_PIN_4;
  GPIO_Porte DATA_R |= GPIO_PIN_5;
  GPIO_Porte DATA_R &&~GPIO_PIN_1;
while (1){
  GPIO_PORTB_DATA_R &=~GPIO_PIN_5;
  GPIO_PORTB_DATA_R |= GPIO_PIN_5;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW、注释已过期。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    两个问题:
    -您是否尝试使用 TIvaware 进行双重检查? 在您使用驱动程序库之后、您可以尝试"最小化延迟"
    -您是否使用示波器检查了输出? "暴力"循环将使您在接近20MHz 的频率下切换引脚...
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有尝试 Tivaware、只是因为我成功地使用了所有其他没有它的器件。  

    我没有让它通过该环路。  我用示波器监视输出并在调试器中单步执行。