20907|40

431

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

LM3S菜鸟成长日记(连载中)~~~~~~~~ [复制链接]

收到板子好几天了,也一直没发帖,主要因为自己是个菜鸟,第一次血ARM,没办法呀,哈哈,说到这里也该谈谈我这几天的学习过程了。

   这里高手就无视哈。我说给我一样的菜鸟的。。学啥芯片都有共同点吧,我这里就把LM3S当单片机用,首先子曰:“工欲善其事,必先利其器。学LM3S没啥好书,那没我们就要找到好的资料,这里对菜鸟太重要了,这里就推荐3份必须要的资料,我就是从这里入手的:

 

首先说说8962_EvalBoard 文档,主要看这里面的开发板设计,端口,电路,学电子的都要先看电路图的。我们学GPIOOLEDCAN,等等,都要看电路接口。这里就不多说了。

再说下,周工的翻译的DATASHEET,英语不好的可以先看看中文的,先入门,我是研究生要入门决定中文也来的快点,再个是感觉翻译的还不错。这里面LM3S的主要模块都有详细介绍,学寄存器必备的。外设驱动指南是菜鸟必看的,这个就是用于编程用的,就是TI的函数库~~~~~~~~~

      弄了4天把这个读完了,主要是实验室太忙,没时间看哦~~~~~,于是弄了第一个程序,点亮一个数码管,呵呵,大家见笑了:看电路图

 

  

就是写PF0口吧。

 

[ 本帖最后由 0212009623 于 2010-11-13 11:35 编辑 ]

最新回复

谢谢分享!!  详情 回复 发表于 2011-8-25 09:11
 
点赞 关注

回复
举报

431

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

首先看看外设驱动指南,找到GIOP口的函数库,GPIOPinTypeGPIOOutput,对就这个函数了,把管脚射为输出,点亮LED要输出高电平,用GPIOPinWrite吧。当然系统的初始化也是必须的:找到这方面的函数:SysCtlPeripheralEnable,对,就是管脚初始化。系统时钟也要给吧,SysCtlClockSet,给个时钟。一切完备啦,开始写了:

 

  进编译环境,添加几个库文件 

 一个用于仿真的函数,不加布能仿真的,呵呵。 器件库也是必须添加的。

程序先写头文件吧,我刚才讲的几个函数所包含的文件:

#include "inc/hw_ints.h"        // memmAP的上一级库

#include "inc/hw_memmap.h"   //存储单元分配

#include "inc/hw_types.h"      // driverlib上一级库

#include "driverlib/gpio.h"      //GPIO函数库

#include "driverlib/sysctl.h"  //系统设置

#include "drivers/rit128x96x4.h"   //仿真驱动

//主函数

 

int main(void)

{

 

   SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                   SYSCTL_XTAL_8MHZ);//分配时钟

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIO

 

    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);///设置F0口为输出

    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1);///设置输出为1

       while(1);//延时     

}

好的,一个超超简单的程序就弄出来了,高手闪过,下载够LED灯亮了。OK

发现关键就是找驱动库函数,这样大家就好应用了。呵呵

好了,菜鸟总结介绍,现在时间实在是紧,导师压迫呀~~~。下次弄定时器的。。。。。。

 

[ 本帖最后由 0212009623 于 2010-11-13 11:36 编辑 ]
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
图片怎么显示不了?????
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

4
 

笔记是连载的,我会一直在此帖楼下写,就在这个帖子下面接着发;WORD也不断跟新,希望大家关注哦~~~

[ 本帖最后由 0212009623 于 2010-11-13 11:39 编辑 ]

LM3S菜鸟学习笔记.doc

51.5 KB, 下载次数: 88

LM3S菜鸟学习笔记.doc

59 KB, 下载次数: 74

 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

5
 

点击上传附件,然后再点插入就行了。

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

6
 
更在下:#include "drivers/rit128x96x4.h"    是驱动OLED库
 
 
 

回复

1万

帖子

16

TA的资源

版主

7
 

顶下

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1392

帖子

0

TA的资源

五彩晶圆(中级)

8
 
楼主加油啊!!!
 
 
 

回复

2万

帖子

74

TA的资源

管理员

9
 
原帖由 0212009623 于 2010-11-10 22:18 发表 图片怎么显示求助呀~~我写的WORD文档上传算了,求教怎么把WORD上的图像添加进去~~~~~~~


将图片以附件形式上传即可
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

10
 

接上次系统时钟的使用

系统时钟的使用
今天讨论下定时器的使用,定时器应该是一个芯片的核心运用了,什么看门狗,我都把它看成此类运用.如果仅仅用到延时的话,一个daley函数已经足够了。但是定时器更加的精确吧。
先讲讲系统时钟systick.他使用的几个函数先给弄清楚:
SysTickPeriodSet   设置定时周期
SysTickEnable      系统定时器使能
其实和设置GIOP的端口函数类似。定时器就是个计时的作用,要运用到实际的工程中,必须以中断形式加入。下面就来说说LM3S的中断了,LM3S中断的标志应该是ISR,
找到中断相关函数:       
     
IntMasterEnable();      开放总中断
SysTickIntEnable    系统定时器中断使能
好了,函数不多,就这么点函数,很简单吧,下面开始写程序,这里面要多加一个头文件:#include "driverlib/systick.h" 表示系统的时钟库函数,那么程序如下:

#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
  #include "driverlib/systick.h"

int main (void)
{
                                                                                          
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);                        


    GPIOPadConfigSet(GPIO_PORTF_BASE,  GPIO_PIN_0 ,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
     GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);
           GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1);     


    IntMasterEnable();                  /*  开放总中断                  */
    SysTickPeriodSet(6000000);             /*  设置定时周期为1秒,即6M     */
    SysTickEnable();                 /*  系统定时器使能              */
    SysTickIntEnable();                     /*  系统定时器中断使能          */
      while (1){;}          
}
void  SysTickint  (void)
{
    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0, ~GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_0));
}
下载后LED按照1秒精确运行。
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

11
 

 

那么还有其他的定时器,比如定时器0,定时器1,定时器2,怎么设了?其实和系统时钟设计差不多,就是把上面几个函数改改就OK,大家先看看外设,系统时钟我这里面就说说定时器0 A吧,其他的都一样了。头文件里与定时器0相关的头文件先加进去:  #include "driverlib/timer.h"

再找相应的函数:

TimerConfigure  定时器配置函数

TimerLoadSet   定时器装载函数,主要是确定定时器时间

TimerIntEnabl   使能定时器

IntEnable       使能定时器外设。

函数其实不多呀,好少哦,就按照周工写的那个库上找,按照这个方式把上面系统时钟的程序改下,删带系统时钟配置,加上定时器0A的配置就 OK,很简单哦,稍微修改下定时0A的程序就出来了,也是按照1秒闪烁的:

#include "inc/hw_ints.h"

#include "inc/hw_memmap.h"

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/gpio.h"

#include "driverlib/interrupt.h"

#include "driverlib/sysctl.h"

 

  #include "driverlib/timer.h"

 

 

int main (void)

{

                                                                                         

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

       SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 );             //修改部分          

 

 

    GPIOPadConfigSet(GPIO_PORTF_BASE,  GPIO_PIN_0 ,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);

     GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_0);

          GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 1);       

 

 

    IntMasterEnable();                                                

    GPIOPinTypeTimer(TIMER0_BASE, TIMER_A);

       TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);    //修改部分

        TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet() );    //修改部分

      TimerIntEnable(TIMER0_BASE,     TIMER_TIMA_TIMEOUT);      //修改部分

          TimerEnable(TIMER0_BASE, TIMER_A);                     //修改部分

            IntEnable(INT_TIMER0A);                          //修改部分                 

      while (1);                                        

}

 void Timer0int  (void)

{

     TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);       //修改部分

    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0, ~GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_0));

        TimerEnable(TIMER0_BASE, TIMER_A);                        //修改部分 

}

 

定时器讲到这里了,下次说说中断调用吧 [ 本帖最后由 0212009623 于 2010-11-13 11:26 编辑 ]
 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

12
 

楼主好像没仔细研究开发板吧,开发板的晶振是8MHZ的,楼主程序里写的是6MHZ。。。。。。。。。。。还有SysTickPeriodSet(6000000); /* 设置定时周期为1秒,即6M */  这里也不对吧

 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

13
 
楼主最好把程序下载到开发板上验证一下。
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

14
 
程序下载成功了呀,也定时跳动,选择外部震荡频率一定要和晶振频率一样吗?6M的正好有一秒,所以选择6M了,程序也成功了。关于这个问题请指教,非常谢谢哦~~~~~~~~有错就今后改正,

[ 本帖最后由 0212009623 于 2010-11-13 20:46 编辑 ]
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

15
 

回复 15楼 0212009623 的帖子

软件中是没有问题,硬件中也能正常运行,不过时间上应该有出入,按照systick的特点运行时钟频率(这里是8M)刚好是一秒,你这里改成6M,就应该是6M/8M的运行时间,少于一秒,我是这么理解的,不知道对不对
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

16
 

回复 16楼 cbuestc 的帖子

哦,知道了,应该是8M呀,是systick,必须要8M,这个错误我改改
 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

17
 

回复 17楼 0212009623 的帖子

呵呵,大家一起讨论,共同学习LM8962
 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

18
 

硬件里8MHZ的晶振,软件里用的是6MHZ 的晶振,定时时间肯定不是一秒了,赞同16楼的观点

[ 本帖最后由 beyondvv 于 2010-11-13 23:34 编辑 ]
 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

19
 

GPIO中断的处理

今天说说中断的调用:

简单的说,中断就是外部有事件要改变主程序的进程,这里面我就弄的简单的例子讲讲吧,自己也很菜,就用一个按钮控制LED发亮吧。按下后产生中断,LED灯熄灭,放开后LED重新被点亮,这样就出现了按住熄灭,放开点亮的现象。

先写这个程序时候,第一还是先找到GPIO中断的相关函数。

IntEnable     中断使能函数

GPIOIntTypeSet     GPIO端口的中断设置函数,

GPIOPinIntEnable   GPIO端口的中断使能

LM3S_外设驱动库用户指南113

LM3S_外设驱动库用户指南70

LM3S_外设驱动库用户指南73

 

 

 

 
 
 

回复

431

帖子

0

TA的资源

一粒金砂(高级)

20
 

函数如下:

#include "inc/hw_ints.h"

#include "inc/hw_memmap.h"

#include "inc/hw_types.h"

#include "driverlib/debug.h"

#include "driverlib/gpio.h"

#include "driverlib/interrupt.h"

#include "driverlib/sysctl.h"

 #include "driverlib/timer.h"

int main (void)

{         SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                   SYSCTL_XTAL_8MHZ);

 

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);                       

  

    GPIOPadConfigSet(GPIO_PORTF_BASE,  GPIO_PIN_0 , GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);            /*  设置为推挽管脚        */

    GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_DIR_MODE_OUT);    ;                                      //设置端口模式    

    GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);                     /*  设置为弱上拉    */

   GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_DIR_MODE_IN);         

                                                                                                       //设置端口模式

                                               

    IntEnable(INT_GPIOE);                                              

    GPIOIntTypeSet(GPIO_PORTE_BASE,GPIO_PIN_1,GPIO_LOW_LEVEL);           

    GPIOPinIntEnable(GPIO_PORTE_BASE,GPIO_PIN_1);                                                     //3段位GPIO中断的设置

 

    while (1) {    

   GPIOPinWrite(GPIO_PORTF_BASE,  GPIO_PIN_0 , GPIO_PIN_0);                                           //LED中断跳回后重新点亮

     }

}

 

 

 void GPIO_Port_E_ISR (void)                                                                

  {

  

   GPIOPinIntClear(GPIO_PORTE_BASE, GPIO_PIN_1);                                      //   清掉中断                                                                                                                       

      GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, ~GPIO_PIN_0);                                       //   中断执行语句

         

}      

 

就这3个函数设置GPIO中断的,

这里面要注意个问题,也就是GPIO端口模式的设置,我先开始用GPIOPinTypeGPIOOutput设置输出模式,发现这样设置不行,不知道为什么。换成GPIODirModeSet设置成输出才可以。这个问题弄了半天。

 

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表