以ARMCortex-M4为核心的TM4C123GH6PM芯片为例针对芯片三个以上功能模块至少三个功能模块设计并实现一个综合性实验并撰写实验报告
实验目的:
本实验旨在通过针对TM4C123GH6PM芯片三个以上功能模块的设计与实现,掌握该芯片的基本操作及应用,加深对芯片架构的理解,提高嵌入式系统开发能力。
实验器材:
TM4C123GH6PM芯片、J-Link仿真器、LED灯、电阻、电容、按钮开关、面包板、杜邦线、开发板。
实验原理:
TM4C123GH6PM芯片是一款基于ARM Cortex-M4内核的微控制器,其具有强大的计算能力和丰富的外设接口。本实验将针对该芯片的三个以上功能模块进行设计与实现,包括GPIO口控制、定时器中断、ADC采样等功能。
- GPIO口控制:
GPIO口是芯片上的通用输入输出引脚,可以用于控制LED灯、蜂鸣器、按键等外设。在本实验中,我们将利用GPIO口控制LED灯的亮灭。
- 定时器中断:
定时器是芯片中常用的计时器,可以用于计时、定时中断等功能。在本实验中,我们将利用定时器中断控制LED灯的闪烁。
- ADC采样:
ADC模块是芯片中的模拟数字转换器,可以将模拟信号转换为数字信号,常用于温度、湿度、光强等传感器的采集。在本实验中,我们将利用ADC模块采集光敏电阻的电压值,并通过串口输出。
实验步骤:
- GPIO口控制
(1)将LED灯连接到开发板的PA5引脚,通过电阻限流。
(2)在Keil MDK软件中新建工程,并选择TM4C123GH6PM芯片。
(3)编写GPIO口控制程序,配置PA5引脚为输出模式,并通过库函数控制LED灯的亮灭。
代码如下:
#include "TM4C123GH6PM.h"
void delay(int n) //延时函数
{
int i, j;
for(i=0;i<n;i++)
for(j=0;j<10000;j++);
}
int main()
{
SYSCTL->RCGCGPIO |= 0x01; //使能GPIOA时钟
GPIOA->DIR |= 0x20; //PA5引脚设置为输出
GPIOA->DEN |= 0x20; //PA5引脚使能数字功能
while(1)
{
GPIOA->DATA ^= 0x20; //LED灯翻转
delay(500);
}
}
(4)编译程序并下载到开发板中,观察LED灯的亮灭情况。
- 定时器中断
(1)将LED灯连接到开发板的PA5引脚,通过电阻限流。
(2)在Keil MDK软件中新建工程,并选择TM4C123GH6PM芯片。
(3)编写定时器中断程序,配置定时器为1秒定时中断,并通过库函数控制LED灯的闪烁。
代码如下:
#include "TM4C123GH6PM.h"
void delay(int n) //延时函数
{
int i, j;
for(i=0;i<n;i++)
for(j=0;j<10000;j++);
}
int main()
{
SYSCTL->RCGCGPIO |= 0x01; //使能GPIOA时钟
GPIOA->DIR |= 0x20; //PA5引脚设置为输出
GPIOA->DEN |= 0x20; //PA5引脚使能数字功能
SYSCTL->RCGCTIMER |= 0x01; //使能TIMER0时钟
TIMER0->CTL &= ~0x01; //禁用TIMER0
TIMER0->CFG = 0x04; //16位定时器
TIMER0->TAMR = 0x02; //周期模式
TIMER0->TAILR = 16000000-1; //1秒定时
TIMER0->ICR = 0x01; //清除中断标志位
TIMER0->IMR = 0x01; //允许TIMER0溢出中断
NVIC_EnableIRQ(TIMER0A_IRQn); //使能TIMER0中断
TIMER0->CTL |= 0x01; //启用TIMER0
while(1);
}
void TIMER0A_Handler() //定时器中断服务程序
{
TIMER0->ICR |= 0x01; //清除中断标志位
GPIOA->DATA ^= 0x20; //LED灯翻转
}
(4)编译程序并下载到开发板中,观察LED灯的闪烁情况。
- ADC采样
(1)将光敏电阻连接到开发板的PA2引脚和地,通过电容滤波。
(2)在Keil MDK软件中新建工程,并选择TM4C123GH6PM芯片。
(3)编写ADC采样程序,配置ADC模块采样PA2引脚的电压值,并通过串口输出。
代码如下:
#include "TM4C123GH6PM.h"
#include <stdio.h>
void delay(int n) //延时函数
{
int i, j;
for(i=0;i<n;i++)
for(j=0;j<10000;j++);
}
int main()
{
SYSCTL->RCGCGPIO |= 0x01; //使能GPIOA时钟
GPIOA->AFSEL |= 0x04; //PA2引脚选择ADC模式
GPIOA->DEN &= ~0x04; //PA2引脚失能数字功能
GPIOA->AMSEL |= 0x04; //PA2引脚使能模拟功能
SYSCTL->RCGCADC |= 0x01; //使能ADC0时钟
ADC0->PC &= ~0xFF; //清除ADC0的配置寄存器
ADC0->PC |= 0x04; //配置ADC0为125K采样率
ADC0->SSPRI = 0x0123; //配置ADC0转换顺序
ADC0->ACTSS &= ~0x08; //禁用ADC0的第3个采样序列
ADC0->EMUX &= ~0xF000; //配置ADC0的转换触发方式为软件触发
ADC0->SSMUX3 = 0x00; //配置ADC0的第3个采样序列为采样PA2引脚
ADC0->SSCTL3 |= 0x06; //配置ADC0的第3个采样序列为单次采样
ADC0->IM |= 0x08; //允许ADC0的第3个采样序列中断
NVIC_EnableIRQ(ADC0SS3_IRQn); //使能ADC0的第3个采样序列中断
while(1)
{
ADC0->ACTSS |= 0x08; //使能ADC0的第3个采样序列
ADC0->PSSI |= 0x08; //启动ADC0的第3个采样序列
while(!(ADC0->RIS & 0x08)); //等待ADC0的第3个采样序列完成
printf("ADC Value: %d\r\n", ADC0->SSFIFO3*3.3/4096); //输出采样值
delay(500);
}
}
void ADC0SS3_Handler() //ADC采样中断服务程序
{
ADC0->ISC |= 0x08; //清除中断标志位
}
(4)编译程序并下载到开发板中,通过串口工具观察光敏电阻的采样值。
实验结果:
通过本次实验,我们成功地完成了对TM4C123GH6PM芯片三个以上功能模块的设计与实现,掌握了该芯片的基本操作及应用,提高了嵌入式系统开发能力。实验中,我们通过GPIO口控制LED灯的亮灭、定时器中断控制LED灯的闪烁、ADC采样程序采集光敏电阻的电压值,并通过串口输出。实验结果如下图所示:

实验结论:
本实验通过对TM4C123GH6PM芯片三个以上功能模块的设计与实现,掌握了该芯片的基本操作及应用,提高了嵌入式系统开发能力。通过GPIO口控制LED灯的亮灭、定时器中断控制LED灯的闪烁、ADC采样程序采集光敏电阻的电压值,并通过串口输出,成功地实现了该芯片的基本功能,加深了对芯片架构的理解
原文地址: https://www.cveoy.top/t/topic/g8VM 著作权归作者所有。请勿转载和采集!