单片机TM4C123学习(四):频率计

1.#define的使用

#define SQUARE_DUTY 0.5

2.FPU的开启:浮点运算

FPUEnable();
FPULazyStackingEnable();

3.定时器初始化

    //
    // Timer init
    //
      SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);   //使能外设
      TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期计时模式

两个步骤:外部设备使能,设置定时器的类型

4.定时周期设置

    //
    // Timer delay period
    //
      ui32Period = (SysCtlClockGet()/4/83000);                //设置计数上限,这里的设置可以产生83kHz的信号
      TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period -1);      //设置计数范围

这里因为占空比是25%,所以/4,如果占空比是50%,那么/2。

SysCtlClockGet()获得的是系统的频率,也就是40*1000*1000,一个定时周期中灯只能选择暗或者亮,持续时间为1s,所以一暗一亮构成一个周期2s,f=0.5。
SysCtlClockGet()*f=20M,用20M/想要获得的频率,就是ui32Period的值。

5.定时器中断设置
//
// interrupt enable--timer0A
//
   IntEnable(INT_TIMER0A);                            //在系统层使能定时器中断
   TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);   //允许处理某个定时器的中断请求   IntMasterEnable();                                 //使能系统总中断开关   TimerIntRegister(TIMER0_BASE, TIMER_BOTH, Timer0IntHandler); //注册中断处理函数
void Timer0IntHandler(void)
{
    // 清除定时器中断标志位
    TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
if(k==0)
{
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 1<<4);
}
else
{
GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_4, 0<<4);
}
k++;
if(k==4)
{
    k=0;
}
}

6.开启定时器

    //
    // timer0 enable--This will start the timer and interrupts
    //
        TimerEnable(TIMER0_BASE, TIMER_A);

7.不知道为什么需要这个,是为了提高精度?

// 建立并使能系统滴答定时器,作为延时循环的时钟参考(1s)(秒级延时不准确)
ROM_SysTickPeriodSet(ROM_SysCtlClockGet()); //设置SysTick计数器的周期值ROM_SysTickEnable();                        //使能SysTick计数器,开始倒计数

8.

				
时间: 2024-10-04 17:16:21

单片机TM4C123学习(四):频率计的相关文章

单片机TM4C123学习(二):中断与按键控制

1.按键初始化 按键K1——PD7 按键K2——PF4 按键K3——PA3 按键K4——PA2 // // key1 init // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);已经在LED init写过了,不然也是要写的 GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7); 也就是说,按键初始化只需要(外部设备使能和)设置管脚类型为输入两个步骤. 2.中断使能 三个步骤:设置端口中断类型,使能端口中断,

nodejs学习四 Node.js NPM

什么是NPM? 不知道大家注意没有,windows平台下的Node.js安装包大小才区区4M多,真可以用短小精悍来形容它,作为一种编程语言,像java一个SDK 就几十M,为什么node.js的运行环境这么小呢?这其中的微妙之处在于,它拥有一个庞大的第三方软件库. 在Node本身提供的包(原生)中没有我们要实现的功能模块的时候,我们可以去寻找下是否已经有人实现了这种功能.毕竟重复造轮子这种事情,很多人都不想干. 去哪里寻找我们想要的包呢?如果你还不知道报的名字,你可以去https://www.n

ZigBee学习四 无线+UART通信

ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique message ID (counter) afAddrType_t GenericApp_DstAddr; //unsigned char uartbuf[128];/********************************************************************** L

Spark学习四:网站日志分析案例

Spark学习四:网站日志分析案例 标签(空格分隔): Spark Spark学习四网站日志分析案例 一创建maven工程 二创建模板 三日志分析案例 一,创建maven工程 1,执行maven命令创建工程 mvn archetype:generate -DarchetypeGroupId=org.scala-tools.archetypes -DarchetypeArtifactId=scala-archetype-simple -DremoteRepositories=http://scal

Beaglebone Back学习四(GPIO实验)

GPIO Beaglebone Back开发板引出了92个引脚,其中只有65个GPIO口可通过配置使用,由于引脚具有"复用"的特性,大约每个引脚有8种工作模式(Beagle System Reference Manual),默认情况下,设为Mode7.由于P8扩展部分的引脚功能相对简单,复用不多,故项目功能复杂时,最好选择P8上的GPIO口. 对GPIO口的操作,主要有三个步骤 1 选择GPIO口根据以下两表,确定使用那个GPIO口,该表也可以在BBB_SRM文件中找到. (1)拉电流

Silverlight学习(四) domainservice动态多条件查询

上次讲了silverlight+MVVN+EF的简单框架,能够实现简单的数据CURD,但是多条件动态的查询一直没有实现.在网上查阅了很多资料,发现自己走了很多误区,代码很难调试正确. 这次的查询是基于上次的查询,只是增加了一个查询条件,动态多条件的查询的重点是获取查询的语言. 1 private string GetSql() 2 { 3 string query = "1=1"; 4 if (!string.IsNullOrEmpty(searchText.name)) 5 { 6

Gradle学习(四) web工程构建

Gradle为应用开发提供了两个相关的插件:war plugin以及jetty plugin war plugin继承了java plugin为你的工程构建war包,jetty pugin继承了war plugin可以让的工程构建在嵌入式容器jetty中 构建War文件 首先在你的build.gradle中添加如下一行 apply plugin: 'war' 由于war plugin继承了java plugin,所有java plugin也会被默认的加入配置文件中 运行gradle build命

TweenMax动画库学习(四)

目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            TweenMax动画库学习(四)            TweenMax动画库学习(五)  

Android学习四、Android中的Adapter

一.Adapter的介绍 An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making a View for each item in the data set. 一个Adapter是Ad