OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3319|回复: 6

stm32f103,基础定时器 发现分频系数和更细中断使能都无法写入

[复制链接]

2

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-30
在线时间
3 小时
发表于 2020-7-30 21:04:42 | 显示全部楼层 |阅读模式
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
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

279

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2015-3-27
在线时间
98 小时
发表于 2020-7-30 21:04:43 | 显示全部楼层
stm32159 发表于 2020-8-1 11:40
我找到问题了
  TIM6->PSC    = psc;    //分频系数      
  TIM6->ARR    = arr;    //自动重装载值  ...

TIM-> PSC = PSC 是讲 PSC 的值赋给 TIM->PSC
TIM -> PSC &= PSC 等效于 TIM->PSC = TIM - >PSC & PSC 的将 PSC 的值和 TIM ->PSC 做 与 运算,再将计算后结果赋值给 TIM->PSC
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-30
在线时间
3 小时
 楼主| 发表于 2020-7-30 21:05:06 | 显示全部楼层
救命啊
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-30
在线时间
3 小时
 楼主| 发表于 2020-8-1 11:40:46 | 显示全部楼层
  我找到问题了
  TIM6->PSC    = psc;    //分频系数      
  TIM6->ARR    = arr;    //自动重装载值
  这样就行了,虽然我也不知道为什么。。。
回复

使用道具 举报

2

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
994
金钱
994
注册时间
2020-3-12
在线时间
271 小时
发表于 2020-8-1 13:04:13 | 显示全部楼层
两个赋值语句被你写成啥了?
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2019-2-15
在线时间
29 小时
发表于 2020-8-1 13:59:14 | 显示全部楼层
       TIM6->PSC    &= psc;    //分频系数      
       TIM6->ARR    &= arr;    //自动重装载值  
为什么要加&呢,这样写肯定不对啊,
     TIM6->CR1   |= 0x8c<<0;  
左移零位没有什么意义呢
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-30
在线时间
3 小时
 楼主| 发表于 2020-8-3 09:59:00 | 显示全部楼层
弦子的弦 发表于 2020-7-30 21:04
TIM-> PSC = PSC 是讲 PSC 的值赋给 TIM->PSC
TIM -> PSC &= PSC 等效于 TIM->PSC = TIM - >PSC & PSC  ...

反应过来了放映过来了,真的太丢脸了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表