OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 467|回复: 8

新手问题,关于systick的

[复制链接]

  离线 

2

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2018-5-9
在线时间
5 小时
发表于 2018-5-26 11:35:53 | 显示全部楼层 |阅读模式
1金钱
自己写了个程序,但调用的delay函数一直是死循环,经过debug发现是systick->load时钟为0造成的,求问这是什么原因?

systick.png


初始化的时候已经做了:
HAL_Init();                     
Stm32_Clock_Init(360,25,2,8);
delay_init(180);  
__HAL_RCC_GPIOB_CLK_ENABLE();   

最佳答案

查看完整内容[请看2#楼]

问题解决了,发现stm32f4xx_hal_timebase_tim_template.c文件里面有HAL_InitTick函数,在这个函数存在的情况下原来的weak HAL_InitTick函数没有起作用,所以systick没有初始化成功。是我用的模板不对,多了个stm32f4xx_hal_timebase_tim_template.c文件。
回复

使用道具 举报

  离线 

2

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2018-5-9
在线时间
5 小时
 楼主| 发表于 2018-5-26 11:35:54 | 显示全部楼层
问题解决了,发现stm32f4xx_hal_timebase_tim_template.c文件里面有HAL_InitTick函数,在这个函数存在的情况下原来的weak HAL_InitTick函数没有起作用,所以systick没有初始化成功。是我用的模板不对,多了个stm32f4xx_hal_timebase_tim_template.c文件。
回复

使用道具 举报

  离线 

74

主题

6678

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
13386
金钱
13386
注册时间
2013-11-13
在线时间
1606 小时
发表于 2018-5-26 11:58:23 | 显示全部楼层
明显的systick配置的问题,systick就那3,4个寄存器,看寄存器的描述,检查配置
回复

使用道具 举报

  离线 

8

主题

552

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1572
金钱
1572
注册时间
2015-8-25
在线时间
296 小时
发表于 2018-5-26 20:16:27 | 显示全部楼层
你用了系统?这个是带系统的程序采用的
回复

使用道具 举报

  离线 

2

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2018-5-9
在线时间
5 小时
 楼主| 发表于 2018-5-26 21:27:57 | 显示全部楼层
zuozhongkai 发表于 2018-5-26 11:58
明显的systick配置的问题,systick就那3,4个寄存器,看寄存器的描述,检查配置

用的delay和sys文件都是模板里的,难道不是配置好的吗?就是找不到配置的地方
回复

使用道具 举报

  离线 

2

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2018-5-9
在线时间
5 小时
 楼主| 发表于 2018-5-26 21:28:35 | 显示全部楼层
szczyb1314 发表于 2018-5-26 20:16
你用了系统?这个是带系统的程序采用的

没用系统啊,自己写了个按键和流水灯的程序,用的模板里的delay和sys文件
回复

使用道具 举报

  离线 

8

主题

552

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1572
金钱
1572
注册时间
2015-8-25
在线时间
296 小时
发表于 2018-5-26 23:01:19 | 显示全部楼层
a6511629 发表于 2018-5-26 21:28
没用系统啊,自己写了个按键和流水灯的程序,用的模板里的delay和sys文件

你图上贴出来的是系统用的delay_us的函数,用的时钟摘取的方法,你用错了吧
回复

使用道具 举报

  离线 

8

主题

552

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1572
金钱
1572
注册时间
2015-8-25
在线时间
296 小时
发表于 2018-5-26 23:02:43 | 显示全部楼层
//nus为要延时的us数.                                                                                      
void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us; //时间加载                           
        SysTick->VAL=0x00;        //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数         
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
        SysTick->VAL =0X00;       //清空计数器         
}
这个才是非操作系统用的延时
回复

使用道具 举报

  离线 

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-1-15
在线时间
13 小时
发表于 2018-7-12 12:51:48 | 显示全部楼层
stm32跟中断分组有关系么?NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);   这条语句是将SYSTICK的抢占优先级设置多少,响应优先级多少呢?
回复

使用道具 举报

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

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-15 07:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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