前记:
在使用TM4C系列单片机时遇到了一些大大小小的问题,谨以此贴记进行记录,算是一个温故的过程,也希望对刚接触此系列单片机的盆友能有一些帮助。(我所使用的是TM4C123GH6MP单片机,其他的触类旁通即可)
文章目录
- 1.引脚锁定(GPIOLOCK、GPIOCR)
- 解锁过程:(PF0)
- 2.PWM调试
- 注意事项:
- 周期,带宽配置:(以20ms周期为例,电机驱动)
- 3.数据寄存器操作(与32不同)
- 4.TM4C123G开发板引脚问题
1.引脚锁定(GPIOLOCK、GPIOCR)
GPIO commit control 寄存器提供了防止对重要硬件外设的意外编程。即下表所示的引脚复位后是被锁定为特定功能的,如果想使用为普通GPIO或其他复用,需进行解锁。
GPIOLOCK
- 写入 0x4C4F.434B 到 GPIOLOCK 寄存器可解锁 GPIOCR 寄存器
- 写入其他数值或对 GPIOCR寄存器写操作将恢复其锁定状态,以防止更新此寄存器。
- 读器 GPIOCR 寄存器值
0x1: GPIOCR 寄存器处于锁定状态,不能被修改。
0x0: GPIOCR 寄存器处于解锁状态,可以被修改。
GPIOCR
- 0: 相应的 GPIOAFSEL、GPIOPUR、GPIOPDR 或GPIODEN 位不能写入。
- 1:相应的 GPIOAFSEL、GPIOPUR、GPIOPDR 或 GPIODEN 位可以写入。
- 注:除了 NMI 管脚和四个 JTAG/SWD 管脚之外,所有 GPIO 管脚的 GPIOCR寄存器的默认类型是 RO。GPIOCR寄存器当前仅保护这六个GPIO管脚。鉴于此,相应 GPIO 端口的寄存器类型为 R/W
解锁过程:(PF0)
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;
2.PWM调试
注意事项:
TM4C123GXL包含两个PWM模块(PWM Model,PWM0和PWM1),每个PWM模块中又有四个PWM发生器模块(PWMGenerator0~3)和一个控制模块,每个PWM发生器模块能产生两个PWM输出,(但同一个PWM发生器产生的两个PWM输出的周期一样,不过可改变其占空比) 最终能产生16个PWM输出。
- 不同的PWM对应不同的Generatior配置时需要注意
周期,带宽配置:(以20ms周期为例,电机驱动)
理解函数 第三个参数周期的设置
void PWMGenPeriodSet(uint32_t ui32Base, uint32_t ui32Gen, uint32_t ui32Period)
第三个参数的值对应其计数的最终值,即如果配置为(10-1),假设系统时钟为80MHz, 预分频配置为1,其周期就是1/(系统时钟/预分频值)*10 =1/(80m)*10=10us
- 首先我系统的时钟配置为了80MHz
- 在配置工作模式为 (我配置为PWM_GEN_MODE_UP_DOWN)
PWM_GEN_MODE_UP_DOWN后,周期值最大只能为65536*2-1 = 131,071
PWM_GEN_MODE_DOWN , 周期值最大只能为 65535 - 假设时钟分频为1 想配置周期为20ms, ui32Period需配置为 80M/50hz = 1,600,000 (80M对应1s)
- 所以需进行64分频 最后设置为25,000即可
//配置 PWM1 Generator3 周期 freq配置单位为(ms)PWMGenPeriodSet(PWM1_BASE, PWM_GEN_0, 1250*freq - 1);//配置 PWM1 Generator3 占空比 width配置单位为(us) 方便调整电机占空比PWMPulseWidthSet(PWM1_BASE, PWM_OUT_0, 1.25*width - 1);
3.数据寄存器操作(与32不同)
4.TM4C123G开发板引脚问题
PD0与PB6 PD1与PB7是硬件连在一起了的 会互相影响!!!!!!!!!
若想断开 可将R9 R10电阻取掉