新手入门
- 积分
- 19
- 金钱
- 19
- 注册时间
- 2020-7-30
- 在线时间
- 3 小时
|
1金钱
有大佬帮忙找下原因嘛,第一次学,实在搞不懂,无论无何,TIM6->CR1的使能和分频系数就是写不进去,不知道是不是这样才没产生更新中断。
timer.c文件
#include "timer.h"
#include "led.h"
#include "usart.h"
u8 num = 0 ;
//arr:自动重装值。
//psc:时钟预分频数
void TIM6_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR |= 1<<4; //TIM6时钟使能
TIM6->PSC &= psc; //分频系数
TIM6->ARR &= arr; //自动重装载值
TIM6->CR1 |= 0x8c<<0; //发生跟更新事件时,计数器停止。使能了URS、UEV。使能计数器
TIM6->EGR |= 1<<0;
MY_NVIC_Init(1,3,TIM6_IRQn,2);//抢占1,子优先级3,组2
TIM6->SR = 0; //清更新中断标志
TIM6->CR1 |= 1<<0;
TIM6->DIER = 1; //使能更新中断
}
//定时器6中断服务程序
void TIM6_IRQHandler(void)
{
if(TIM6->SR & 0X0001)//溢出中断
{
LED1=!LED1;
}
printf("num = %d\r\n",num);
TIM6->SR &=~(1<<0); //清除中断标志位
TIM6->CCR1 |= 1; //使能计数器
}
mian:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM6_Int_Init(1000,71);
while(1){};
}
|
最佳答案
查看完整内容[请看2#楼]
TIM-> PSC = PSC 是讲 PSC 的值赋给 TIM->PSC
TIM -> PSC &= PSC 等效于 TIM->PSC = TIM - >PSC & PSC 的将 PSC 的值和 TIM ->PSC 做 与 运算,再将计算后结果赋值给 TIM->PSC
|