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:tm4c123gh6pm

Guru**** 2524460 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1282633/tm4c123gh6pm-tm4c123gh6pm

器件型号:TM4C123GH6PM

您好

我目前正在使用 TM4C123GH6PM 进行一个项目。

AM 使用 TIMER1A_Handler 在连接到电位计的 GPIOB 端口5触发 ADC 转换。触发转换时,AM 将  ADC1->SSFIFO3的结果存储 在 ADC_RESULTS 中。  如果 ADC_RESULTS 值大于2048 ,绿色 LED 将亮起。 该代码编译时没有错误,但绿色 LED 指示灯未亮起 ,因此我的 ADC 转换似乎不成功。

如果你有任何想法,可能是什么问题与我的代码,请帮助我.

此致、

认真。

下面是我的代码:

#include "TM4C123.h"//设备标题

void ADC_init (void);
void timer_init (void);
void LED_init (void);
void TIMER1A_Handler (void);


Volatile int ADC_RESULTS;

int main (空)
{

LED_INIT ();//
adc_init ();//调用 ADC 初始化函数
timer_init ();//调用计时器初始化函数

//启用计时器中断
__enable_IRQ ();
while (1)
{
while ((ADC1->RIS & 0x08)== 0){}// ss 上的原始中断//等待中断
如果(ADC_RESULTS > 2048)
{
GPIOF->data |= 0x08;//led on

否则{
GPIOF->DATA &=~0x08;//led off

ADC1->ISC = 0x08;//清除中断





//用于初始化 ADC 的函数
void ADC_init (void)
{
SYSCTL->RCGCGPIO |= 0x02;// PB 时钟
SYSCTL->RCGCADC |= 0x02;// ADC 1时钟

GPIOB->AFSEL = 0x20;//PB5
GPIOB->DEN &=~0x20;//数字禁用
GPIOB->AMSEL |= 0x20;

//ss 配置
ADC1->ACTSS &=~0x08;//禁用 SS3
ADC1->EMUX = 0x5000;//计时器事件触发器
ADC1->SSMUX3 = 11;//AIN 11作为输入源
ADC1->SSCTL3 = 0x06;//结束位,中断使能
ADC1->ACTSS |= 0x08 ;//启用 SS3

void timer_init (void)
{
SYSCTL->RCGCTIMER |= 0x02;//计时器1时钟
Timer1->CTL &=~0x01;//禁用定时器
Timer1->CFG = 0x04;//16位配置
Timer1->TAMR = 0x02;//1周期模式
Timer1->TAPR = 4;//预分频器
Timer1->TAILR = 16000000;//加载值
Timer1->IMR = 0x01;//中断屏蔽已启用
Timer1->CTL |= 0x01;//启用计时器
Timer1->ICR |= 0x01;//清除先前的中断

NVIC->ISER[0]=(1U<<21);//启用 IRQ


void LED_init (void)
{
SYSCTL->RCGCGPIO |= 0x20;// pF 时钟
GPIOF->DIR = 0x0E;
GPIOF->DEN = 0x0E;

//计时器处理程序
//它将触发 ADC 转换
void TIMER1A_Handler (void)
{

if (Timer1->MIS & 0x01)
{
while ((ADC1->RIS & 0x08)== 0){}//等待 ADC 转换完成
ADC_RESULTS = ADC1->SSFIFO3;
Timer1->ICR |= 0x01;

GPIOF->data |= 0x04;//用于去抖

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

    您好!

     首先、请参阅此常见问题页面中的项目4。  https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/695568/faq-faqs-for-tm4c-arm-cortex-m4f-microcontrollers。 我们不支持 DRM 风格的编程。 我们建议您将 TivaWare SDK 与 API 驱动程序配合使用、以便对外设进行编程。 如果您必须使用 DRM、我建议您首先运行 TivaWare 示例并了解寄存器是如何初始化的。 所有 API 的源代码可在  C:\ti\TivaWare_C_Series-2.2.0.295\driverlib 中找到。  

     您只是说 LED 不会亮起。 ADC 结果如何? 只是零点还是什么? 你是否获得了计时器中断? 您调试的方式是首先在计时器 ISR 中放置一个断点。 它会在那里停止吗? 也许您还可以在计时器中切换另一个 GPIO 引脚并测量 GPIO 引脚切换频率。 GPIO 是否根据您的计时器频率进行切换? 下一步、找出返回了什么 ADC 值? 尝试在 ISR 中单步执行您的代码、找出返回的 ADC 值。