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.

[参考译文] CCS/TM4C123GH6PM:如何使用 SysTick 来创建延迟。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/582876/ccs-tm4c123gh6pm-how-to-use-systick-to-create-delay

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

我尝试使用 SysTick 来创建延迟。但只有第一个 LED 始终亮起...

我的代码如下所示。

#include
#include "tm4c123ghp6.h"
void SysTick Init (void);//初始化 SysTick 计时器
void SysTick 等待(unsigned long delay1);
void SysTK_Wait10ms (unsigned long delay1);//等待时间

//***** 2.全球声明部分*****
//函数原型:定义的每个子例程


//Next[8]数组代表8个输入和下一个状态转换
//第一个数组元素代表000个输入,第二个数组元素代表001个输入,依此类推,最多111个(第八个输入)
//输入位表示- MSB=步进传感器、中间位=南传感器、LSB =西传感器
//FSM[9]={
//{输出到六个信号 LED (TrafficLights_Cars)、输出到两个行人 LED (TrafficLights_Ped)、以10ms 为单位的时间、Next[8]阵列元素(Next States)}、
//…………………

无符号长整型输入;
//***** 3.子例程部分*****

int main (void){
volatile unsigned long delay;

GPIO_PORTB_AMSEL_R=0x00;//禁用端口 B 上的模拟
GPIO_Porte _AMSEL_R=0x00;//禁用端口 E 上的模拟
GPIO_PORTB_PCTL_R=0x00000000;//启用常规 GPIO
GPIO_Porte _PCTL_R=0x00000000;//启用常规 GPIO
GPIO_PORTB_DIR_=0x1F;// PB0-5上的输出
GPIO_Porte _DIR_=0x00;// PE0-2上的输入
GPIO_PORTB_AFSEL_R=0x00;//禁用备用功能
GPIO_Porte _AFSEL_R=0x00;//禁用备用功能
GPIO_PORTB_DEN_R=0x1F;//在 PB0-5上启用数字 I/O
GPIO_Porte _DEN_R=0x07;//在 PE0-2上启用数字 I/O
while (1){
GPIO_PORTB_DATA_R=0x01;
SysTK_Wait10ms (100);
GPIO_PORTB_DATA_R=0x02;
SysTK_Wait10ms (100);


void SysTick Init (void){
NVIC_ST_CTRL_R = 0;//在设置期间禁用 SysTick
NVIC_ST_CTRL_R = 0x00000005;//使用内核时钟启用 SysTick

//延迟参数以80 MHz 内核时钟的单位表示。 (12.5ns)
void SysTick 等待(unsigned long delay2){
NVIC_ST_RELOAD_R = delay2-1;//等待计数
NVIC_ST_CURRENT_R = 0;//写入当前的任何值都会清除
while ((NVIC_ST_CTRL_R&0x00010000)=0){//等待计数标志


// 800000*12.5ns 等于10ms
void SysTK_Wait10ms (无符号长 delay1){
unsigned long i;
for (i=0;<delay1; i++){
SysTick 等待(800000);//等待10ms

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您仅将 PB0设置为1。
    GPIO_PORTB_DATA_R=0x01;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    海报不会因为不明智(和未警报)使用直接注册编码而经历更大、更关键的"延迟"?

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

    CB1有很多理由! 您应该几乎被禁止使用此类不必要和复杂的 DR 编写来支持帖子。 让我们在它孵化之前避免邪恶! )

    Sudheer、

    请使用 TivaWare。 阅读一些文章或查看一些示例、您需要几个小时才能了解它的内容、之后您的所有编码将变得更简单、更快。
    在发布代码时、请使用粘贴 图标、以便可以轻松地读取它。
    而且、虽然 SysTick 的使用并不是一个问题、但是如果您像这样对闪烁进行编码、那么您就无法使用昂贵的32位 MCU 执行任何其他操作... 学习中断和计时器、并将它们用于您的目标。

    如果遵循这些指导原则、像 Charles 这样的优秀和有支持的绅士将能够在日常工作中帮助更多的人-或者使用额外的时间来提供更多示例和指导文件!

    此致

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

    您好、Bruno、

     我知道有些教育机构要求其学生学习如何使用直接寄存器访问对 MCU 进行编程。 我认为讲师有这样做的意图。 我不想在这里辩论。 当然、从支持的角度来看、使用 TivaWare 库会更容易。 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、
    我完全理解你的考虑--我没有想到这一点。
    当然、这是 TI 的政策决定、我在其中没有发言权-但我的观点是、这应该是一个真正的 E2E 论坛-其中 E 代表工程师、而不是 Estudante ... 当然,我们都愿意提供帮助,但如果它被教育机构一级的基本问题淹没,平台的整体质量就会下降。 因此,如果学校本身需要直接注册(这是有道理的,这样学生仍然可以理解 MCU 内部正在发生的事情),那么这些机构就应该是支持学生和消除疑问的机构。
    谢谢
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找到了答案,删除此行 NVIC_ST_CURRENT_R = 0;以创建延迟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这里有些人可能注意到"供应商论坛指南"与父母之间的相似性。   (两者都负责指导、鼓励和(部分)纪律...)

    下面说明了此处明显的"弱点"(此主题):

    男父母:"我禁止你这么做!"  (对孩子说)

    女性家长:"是的-你可以做到!"  (对同一个孩子说)

    一致性(长期)已被证明是"最佳工作"。   并且尚未流过该线程...

    作为小型的技术企业所有者-如果我们在项目/产品开发期间遵循(主要)使用"直接注册或 ASM "的人员(可能)的工作安全实践、公司/我不会持续很长时间。  “比赛是对速发车”——不是吗?  人们必须学习经济学和工程学-那些提早进入市场的人会获得最高的利润。  DRM 支持者确保(非常)延迟到达市场-这是否是好的?

    对于学生和那些"在现场"的学生来说、寻求"最佳实践-技巧和方法"是否更为重要?  该供应商提供一流的 API、即"经过试用、测试和验证!"  拒绝这样做是否明智?   真的吗?

    请注意-" DRM 或 ASM 的每一个用途"(最常)都是一次新的冒险!  生成的代码(始终)为"未经测试、未经测试且远未经过验证!"  这种情况的证据每天都有-就在这里- DRM 用户"崩溃/烧坏"且有淫秽的规律性。   除了在"缓慢和错误的邀请运动"中发展之外、还学到了什么?

    API 的"绝对不能"使用会阻止对适用寄存器的全面审查。   在我看来-拒绝 API 是过去不受欢迎的痕迹-只有在没有指导的寄存器操作可用的情况下。   

    当今的技术发展本质上是全球性的-拒绝"巧妙、专注、经过测试和广泛"的最佳实践增强(即供应商的 API)是不合理的!