嵌入式接口期末复习-(江苏海洋大学)--(第五部分Systick RTC)

一:PWM工作过程内容补充(非电路内容)

 1.计数器从0往上计数,与CCRx寄存器比较,比他小的时候输出低电平,比他大的时候输出高电平,不断循环,产生了PWM的脉宽调制信号。                                                                   2.周期由ARR决定(与定时器时钟有关)                                                                                       3.占空比由CCRx决定的,以图为例,如果CCRx很小,那么对应下来的低电平就很短;如果CCRx很大,那么对应下来的低电平就很长

二:RTC(实时时钟 简单了解一下就好了)

1. 独立定时器     拥有一个连续计数的计数器       提供时钟日历功能。                                    2. 修改计数器值可以重新设置当前时间和日期

RTC 时钟源和时钟操作函数:
void RCC_RTCCLKConfig(uint32_t CLKSource);//时钟源选择
void RCC_RTCCLKCmd(FunctionalState NewState);//时钟使能

RTC配置函数(预分频 计数值):
void RTC_SetPrescaler(uint32_t PrescalerValue); 预分频配置
void RTC_SetCounter(uint32_t CounterValue); 设置计数器值
void RTC_SetAlarm(uint32_t AlarmValue); 闹钟设置

RTC中断设置函数:
void RTC_ITConfig(uint16_t RTC_IT,FunctionalState NewState);

RTC允许配置和退出配置函数
void RTC_EnterConfigMode(); 允许RTC配置
void RTC_ExitConfigMode(); 推出配置模式

同步函数
void RTC_WaitForLastTask(); 等待上一次操作完成
void RTC_WaitForSynchro(); 等待时钟同步

相关状态位获取清楚函数:
FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);
void RTC_ClearFlag(uint16_t RTC_FLAG);
ITStatus RTC_GetITStatus(uint16_t RTC_IT);
void RTC_ClearITPendingBit(uint16_t RTC_IT);

其他函数
PWR_BackupAccessCmd();  BKP后备区域访问使能
RCC_APB1PeriphClockCmd(); 使能PWR BKP 时钟
RCC_LEKConfig(); 开启LSE RTC选择LSE作为时钟源
uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); 读BKP寄存器
void BKP_WriteBackupRegister(uint16_t BKP_DR,uint16_t Data); 写BKP

RTC配置一般步骤 

三: SysTick系统时钟(了解)

1. 系统时钟SYSTICK可来源于三个时钟源                                                                                    [1] HSI振荡器时钟          [2]HSE振荡器时钟            [3]PLL时钟

2.任何一个外设在使用之前,必须首先使能其相应的时钟

3.重要的时钟                                                                                                                                [1]SYSTICK系统时钟    [2]AHB总线时钟     [3]APB1总线时钟(低速)                                                                       [4]APB2总线时钟(高速) [5]PLL时钟

4.系统滴答定时器  

中断的方式实现delay延迟

static __IO uint32_t TimingDelay;

void Delay(__IO uint32_t nTime)
{ 
     TimingDelay = nTime;
     while(TimingDelay != 0);//等待中断
}

void SysTick_Handler(void)
{
    if (TimingDelay != 0x00) 
     { 
       TimingDelay--;
     }
}

int main(void)
 {  …

    if (SysTick_Config(SystemCoreClock / 1000)) //systick时钟为HCLK,中断时间间隔1ms
     {
     	while (1);
     }
    while(1)
     { 
           Delay(200);//2ms
            … 
     }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值