OpenEdv-开源电子网

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

SysTick_Config()函数问题

[复制链接]

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-3
在线时间
0 小时
发表于 2015-5-7 23:01:06 | 显示全部楼层 |阅读模式
5金钱
各位好:今天我在学习systick过程发现一个奇怪问题
SysTick_Config(SystemCoreClock / 1000000)可以正常运行
而这个函数SysTick_Config(SystemCoreClock / 8000000)就无法正常运行
main()中 delay_us(1000000)  间隔1秒
经过测试发现SystemCoreClock / 8000000这个大于37就可以运行 小于就不可以 led亮 SystemCoreClock / 1000000这个就没有问题 间隔是1秒  不清楚为什么  下面是函数体 请高手指点!
void delay_init(u8 SYSCLK)
{
if(SYSCLK==72)
{

if (SysTick_Config(SystemCoreClock / 1000000)) // ST3.5.0库版本
  { 
/* Capture error*/
while (1);
  } 
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
else if(SYSCLK==8)
{

if (SysTick_Config(SystemCoreClock / 8000000)) // ST3.5.0库版本
  { 
    /* Capture error*/
    while (1);
  }
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//这个函数要放到后面 如果放到if的前面就不起作用 造成闪烁的速度快
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

 
  }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-8 00:22:07 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2015-5-8 22:46:49 | 显示全部楼层
if (SysTick_Config(SystemCoreClock / 8000000)) // ST3.5.0库版本
  {
回复

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2015-5-8 22:47:20 | 显示全部楼层
原子哥就在这个地方if (SysTick_Config(SystemCoreClock / 8000000)) // ST3.5.0库版本
回复

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2015-5-8 22:47:58 | 显示全部楼层
SystemCoreClock / 8000000 改为SystemCoreClock / 800000  少个零就可以
回复

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2015-5-8 22:53:07 | 显示全部楼层
另外原子哥  我想用systick 来扫描键盘    但是要判断countflag是否置一   不知从何处下手啦   请给予指点  我把程序附上
void Key_Scan(void)
{
   
 
if(temp&0x01&&!(temp&(1<<16)))//查询COUNTFLAG标志位,等待时间到达
{
 temp=SysTick->CTRL;
}
else
{
   /* 读取IO电平 */
     KeyPortStatus = GPIO_ReadInputData(GPIOA) & 0x2000;
 /* 进入状态机流程 */
     switch(KeyScanState)
       {
                /* 状态1:判断有否按键按下  0代表按下 1 代表没按 */
         case KeyScanState_0:
            {
                if(KeyPortStatus != 0x2000)
                {
                        /* 有按键按下,更新状态标志 */
                   KeyScanState = KeyScanState_1;
                 }
                  break;
             }

                /* 状态2:判断是否抖动 */
           case KeyScanState_1:
              {
                  if(KeyPortStatus)
                  {
                        /* 非抖动,确认按键按下,执行相应操作 */
                     if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_13) == 0)
                     {
                        GPIO_WriteBit(GPIOA,  GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA,  GPIO_Pin_8)));
                      }
                       
                        /* 更新状态标志 */
                      KeyScanState = KeyScanState_2;
                   }
                   else
                    {
                        /* 抖动,确认按键未按下,更新状态标志*/
                        KeyScanState = KeyScanState_0;
                    }
                    break;
                }
  /* 状态3:松手检测 */
            case KeyScanState_2:
                {
                    if(KeyPortStatus == 0x2000)
                    {
                  /* 松手,更新状态标志 */
                  KeyScanState = KeyScanState_0;
                    }
                    break;
                }
          }

     }
}
回复

使用道具 举报

7

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-8-3
在线时间
0 小时
 楼主| 发表于 2015-5-8 22:56:08 | 显示全部楼层
我不太清楚  
if(temp&0x01&&!(temp&(1<<16)))//查询COUNTFLAG标志位,等待时间到达 

 temp=SysTick->CTRL; 

else 
这个判断是否正确   
我用的原子哥 的ministm32  key0  gpioA  引脚 13  
 KeyPortStatus = GPIO_ReadInputData(GPIOA) & 0x2000; 这个判断要提取这个引脚的状态 是否正确。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 17:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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