写了一个简单的跑马灯程序,结果让我很无语,搞了两天了也不知道什么原因。只能求助了。
我想用TIM5进行延时,结果程序老是死在while(!(TIM5->SR & 0x00000001));里面。
[mw_shl_code=c,true]/*
* File Name: delay.c
* Description:延时文件。选择Timer5为基准,定义了以us,ms为单位的延时函数
* Author:wlw
* Date:2014-11-17 15:03:57
*/
#include "delay.h"
#include "sys.h"
#include "system_stm32f10x.h"
/*
* Function name:delay_init
* Description:初始化时钟,选择Timer5,向下计数模式,开启时钟中断
* Parameter:none
* Return:none
*/
void delay_init(void)
{
RCC->APB1ENR |= 1<<3;//开启TIM5时钟
TIM5->DIER |= 0x00000001;//允许更新中断
TIM5->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0)
NVIC_configuration(1,3,TIM5_IRQn,2);
}
/*
* Function name:delay_us
* Description:us级延时函数。延时时间最大为65535us
* Parameter: @time_us -要延时的时间
* Return:none
*/
void delay_us(u16 time_us)
{
TIM5->  SC = 71;//TIM5的时钟源是APB1时钟2倍频,进行71分频后,TIM5时钟频率为1MHz
TIM5->ARR = time_us;//加载计数值
TIM5->CR1 |= 0x00000011;//打开计数器,向下计数模式
while(!(TIM5->SR & 0x00000001));
TIM5->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0)
TIM5->CR1 &= 0xFFFFFFFE;//关闭计数器
}
/*
* Function name:
* Brief:ms级延时函数,延时最大时间为6553ms
* Parameter: @time_ms -要延时的时间
* Return:none
*/
void delay_ms(u16 time_ms)
{
TIM5->  SC = 7199;//TIM5的时钟源是APB1时钟2倍频,进行71分频后,TIM5时钟频率为10KHz
TIM5->ARR = time_ms*10;//加载计数值
TIM5->CR1 |= 0x00000011;//打开计数器,向下计数模式
while(!(TIM5->SR & 0x00000001));
TIM5->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0)
TIM5->CR1 &= 0xFFFFFFFE;//关闭计数器
}
[/mw_shl_code]
|