TM4C123笔记(四、ADC,PWM,I2C)

为什么CSDN写文这么难受QAQ写了好几遍了,每次一粘贴就要崩掉重写…太痛苦了orz)

一、ADC

TM4有两个ADC,分别为ADC0和ADC1。每个ADC位数为12位,下设12个通道,所以总共可以采24路数据。
还可以做差分,可以参考tivaware里外设examples
获取采样值,0-4095,对应0-3.3V
即adc_val =adc_get_value*3.3/4096

注意TM4的ADC有一个”序列“的概念。有4种序列分别是SS0,SS1,SS2,SS3。对应FIFO深度为8,4,2,1。
这个在下面函数有解释,简单来讲就是深度为8的话采8次才算结束。

//ADC编写通用过程

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);

//外设时钟开启,这里开启了ADC0

 DCSequenceConfigure(ADC0_BASE, 3,ADC_TRIGGER_PROCESSOR, 0);

//ADC基地址/序列3/触发器 /优先级最高(可选0~3)

//ADC有两个:ADC0和ADC1
//序列:0~3,对应FIFO深度不同,序列0对应深度8,序列3对应深度1
//触发源?这个有定时器触发或者比较器、PWM触发但是没看懂(我估计processor指自己控制触发中断?)
//优先级:0~3,0最高。

//优先级补充:当同时发生多个采样事件(触发条件)时,将按照 ADC 采样序列器优先级 (ADCSSPRI) 寄存器中
的值对它们进行排序和依次处理。优先级的有效值为0~3,其中0代表最高优先级、3代表最低优先
级。如果多个活动的采样序列具有相同的优先级,将导致转换结果数据不连续,因此软件必须确保
当前活动的所有采样序列各自具有唯一的优先级。

ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH0|ADC_CTL_IE |ADC_CTL_END);

//基地址/序列号/step(我猜是隔几个采一次?)/或选项(通道0、中断、ADC_CTL_END表示到此该次采样序列结束)


附一个TI论坛看到的例子解释序列的概念:

(地址:https://e2echina.ti.com/question_answer/microcontrollers/tiva_arm_cortex/f/96/t/24764#pi58417=1)

ADCSequenceStepConfigure(ADC0_BASE, 0, 0,ADC_CTL_CH1);
ADCSequenceStepConfigure(ADC0_BASE, 0, 1,ADC_CTL_CH2);
ADCSequenceStepConfigure(ADC0_BASE, 0, 2,ADC_CTL_CH3);
ADCSequenceStepConfigure(ADC0_BASE, 0, 3,ADC_CTL_CH4 | ADC_CTL_IE);
ADCSequenceStepConfigure(ADC0_BASE, 0, 4,ADC_CTL_CH5);
ADCSequenceStepConfigure(ADC0_BASE, 0, 5,ADC_CTL_CH6);
ADCSequenceStepConfigure(ADC0_BASE, 0, 6,ADC_CTL_CH7);
ADCSequenceStepConfigure(ADC0_BASE, 0, 7,ADC_CTL_CH8 | ADC_CTL_IE | ADC_CTL_END);

ADC_CTL_CHx表示从哪个通道采样,ADC_CTL_IE表示该次采样后会产生中断;ADC_CTL_END表示到此该//次采样序列结束。所以上面的序列表示从通道1一直采样到通道8,并且在通道4和通道8采样的时候分别产生一次ADC中断,并且通道8采样完成后本次采样序列结束。因为序列0有8次采样,所以序列里面有8个语句,而楼主的程序里面选的是序列3,只有一个采样。所以这个采样从通道3采样,并且产生ADC中断,而且是这个序列的最后一个采样。


ADCSequenceEnable(ADC0_BASE, 3);
//序列使能

ADCIntClear(ADC0_BASE, 3);
//清除中断标志,这里是为了保证标志位已经被清除

while(1)
{
  ADCProcessorTrigger(ADC0_BASE, 3);
  //开启转换,第一个是哪个ADC,第二个是序列

  while(!ADCIntStatus(ADC0_BASE, 3, false))
  {   }
//等待转换结束,输入参数分别是:哪个ADC,序列,是否masked?(这个没懂,似乎和中断有关),一般false即可

ADCIntClear(ADC0_BASE,3);
//清除标志

ADCSequenceDataGet(ADC0_BASE, 3, ADC0Value);
//取ADC数据,最后那个是地址,指向缓存首地址(unsigned int型)



//其他逻辑


}

二、PWM

参考的https://www.cnblogs.com/pursuit1996/p/5070464.html

使用范例

// PWM 初始化,频率为1000,占空比为0

M1PWM7_init(1000, 0);//初始化

M1PWM7_set_duty(duty);//设置占空比

PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, false); // 灭灯

函数定义

//PWM初始化(包成了一个函数)

void M1PWM7_init(uint32_t freq, float duty)

{

//设置PWM时钟为系统时钟的1分频
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);

SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM1);

//配置引脚为PWM功能
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinConfigure(GPIO_PF3_M1PWM7);
GPIOPinTypePWM(GPIOF, Pin3);
//M1PWM7

//配置 PWM1 Generator3·发生器
PWMGenConfigure(PWM1_BASE, PWM_GEN_3,PWM_GEN_MODE_UP_DOWN|PWM_GEN_MODE_NO_SYNC);

//配置 PWM1 Generator3 周期
PWMGenPeriodSet(PWM1_BASE, PWM_GEN_3, SysCtlClockGet()/freq - 1);

//配置 PWM1 Generator3 占空比
*PWMPulseWidthSet(PWM1_BASE, PWM_OUT_7, PWMGenPeriodGet(PWM1_BASE, PWM_GEN_3)duty-1);

//使能 PWM1 输出
PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, true);

//使能 PWM1 发生器模块
PWMGenEnable(PWM1_BASE, PWM_GEN_3);

}

// 设置占空比函数
void M1PWM7_set_duty(float duty)
{

//配置 PWM1 Generator3 占空比
PWMPulseWidthSet(PWM1_BASE,PWM_OUT_7, PWMGenPeriodGet(PWM1_BASE, PWM_GEN_3)*duty - 1);

PWMOutputState(PWM1_BASE, PWM_OUT_7_BIT, true);
//使能 PWM1 ·发生器模块

PWMGenEnable(PWM1_BASE, PWM_GEN_3);

}

三、I2C

(未完,待修改)
(对不起各位看的了orz等我把智能车和保研做完了就更新整理好点TUT…谢谢大家的关注!!orz

  • 22
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tm4c123G是一款微控制器,它具有I2C(Inter-Integrated Circuit)功能。根据引用\[1\]中提供的信息,Tm4c123G的I2C配置需要使用不同的CMD命令。具体的命令包括: 1. I2C_MASTER_CMD_BURST_SEND_START:发送起始信号、从机地址、应答、从机寄存器和应答。 2. I2C_MASTER_CMD_BURST_SEND_CONT:发送数据和应答。 3. I2C_MASTER_CMD_BURST_SEND_FINISH:发送结束信号。 4. I2C_MASTER_CMD_BURST_SEND_STOP:发送停止信号。 根据引用\[2\]中提供的代码,可以看到I2CMasterSlaveAddrSet函数用于设置主机与从机通信时的从机地址。该函数的参数包括微控制器的基地址(ui32Base)、从机地址(ui8SlaveAddr)和通信模式(bReceive)。在函数内部,通过设置I2C_O_MSA寄存器来实现从机地址的设置。 综上所述,要配置Tm4c123G的I2C功能,需要使用不同的CMD命令和相应的函数来设置从机地址和进行数据传输。 #### 引用[.reference_title] - *1* *2* [TM4C123G 硬件I2C](https://blog.csdn.net/weixin_43529046/article/details/90792308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【嵌入式系统】二、初识 Tiva TM4C123G系列开发板](https://blog.csdn.net/xiaoli_tongzhi/article/details/121086418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值