<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32F10x 學(xué)習筆記 2 (SysTick 定時(shí)器)

STM32F10x 學(xué)習筆記 2 (SysTick 定時(shí)器)

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
SysTick定時(shí)器被集成在NVIC中。因此,只要是Cortex-M3內核的單片機,就都有它。這個(gè)學(xué)習筆記就用SysTick定時(shí)器來(lái)實(shí)現走馬燈的功能。

本文引用地址:http://dyxdggzs.com/article/201611/318837.htm

SysTick定時(shí)器非常簡(jiǎn)答,只有四個(gè)寄存器。這四個(gè)寄存器的含義在《Cortex-M3權威指南》那本書(shū)中講的非常的清楚,這里不復述了,下面只講講在STM32上SysTick有什么特殊之處。按照CMSIS標準,用C語(yǔ)言訪(fǎng)問(wèn)這四個(gè)寄存器時(shí)使用的寄存器名稱(chēng)分別如下:

SysTick->CTRL
SysTick->LOAD
SysTick->VAL
SysTick->CALIB

SysTick->CALIB的值固定為9000,因此,只有當系統嘀嗒時(shí)鐘設定為9MHz(HCLK/8的最大值),產(chǎn)生1ms時(shí)間基準。

STM32提供了2個(gè)時(shí)鐘源:

0:AHB/8

1:Processorclock(AHB)

因此,SysTick->CTRL=7表示使用處理器時(shí)鐘作為時(shí)鐘源,使能SysTick,并且使能SysTick中斷。SysTick->CTRL=3時(shí)頻率降為原來(lái)的1/8。

我的開(kāi)發(fā)板上有四個(gè)LED,分別對應的GPIO端口D的PD2、PD3、PD4和PD7。

下面是例子程序,仍然先是直接設置寄存器。

  1. #include"stm32f10x.h"
  2. #defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD
  3. #defineGPIO_LED_PORTGPIOD
  4. #defineGPIO_LED1GPIO_Pin_2
  5. #defineGPIO_LED2GPIO_Pin_3
  6. #defineGPIO_LED3GPIO_Pin_4
  7. #defineGPIO_LED4GPIO_Pin_7
  8. #defineGPIO_LED_ALLGPIO_LED1|GPIO_LED2|GPIO_LED3|GPIO_LED4
  9. voidLED_Spark(void)
  10. {
  11. staticintstate=0;
  12. switch(state)
  13. {
  14. case0:
  15. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  16. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED1);
  17. state++;
  18. break;
  19. case1:
  20. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  21. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED2);
  22. state++;
  23. break;
  24. case2:
  25. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  26. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED3);
  27. state++;
  28. break;
  29. case3:
  30. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  31. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED4);
  32. state=0;
  33. break;
  34. default:
  35. state=0;
  36. break;
  37. }
  38. }
  39. intmain(void)
  40. {
  41. SystemInit();
  42. RCC->APB2ENR|=0x00000020;
  43. GPIOD->CRL=0x24422244;//PD2PD3PD4PD7SettoOutputmode
  44. SysTick->LOAD=24000000/200;
  45. SysTick->CTRL=3;
  46. for(;;)
  47. {
  48. }
  49. }
  50. /**
  51. *@briefThisfunctionhandlesSysTickHandler.
  52. *@paramNone
  53. *@retvalNone
  54. */
  55. voidSysTick_Handler(void)
  56. {
  57. staticintcount=0;
  58. count++;
  59. if(count==100)
  60. {
  61. LED_Spark();
  62. count=0;
  63. }
  64. }


然后是利用STM32 固件函數庫提供的函數的例子。

  1. #include"stm32f10x.h"
  2. #defineRCC_GPIO_LEDRCC_APB2Periph_GPIOD
  3. #defineGPIO_LED_PORTGPIOD
  4. #defineGPIO_LED1GPIO_Pin_2
  5. #defineGPIO_LED2GPIO_Pin_3
  6. #defineGPIO_LED3GPIO_Pin_4
  7. #defineGPIO_LED4GPIO_Pin_7
  8. #defineGPIO_LED_ALLGPIO_LED1|GPIO_LED2|GPIO_LED3|GPIO_LED4
  9. voidLED_Spark(void)
  10. {
  11. staticintstate=0;
  12. switch(state)
  13. {
  14. case0:
  15. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  16. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED1);
  17. state++;
  18. break;
  19. case1:
  20. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  21. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED2);
  22. state++;
  23. break;
  24. case2:
  25. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  26. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED3);
  27. state++;
  28. break;
  29. case3:
  30. GPIO_SetBits(GPIO_LED_PORT,GPIO_LED_ALL);
  31. GPIO_ResetBits(GPIO_LED_PORT,GPIO_LED4);
  32. state=0;
  33. break;
  34. default:
  35. state=0;
  36. break;
  37. }
  38. }
  39. intmain(void)
  40. {
  41. GPIO_InitTypeDefGPIO_InitStructure;
  42. SystemInit();
  43. SysTick_Config(SystemCoreClock/100);
  44. /*EnableGPIOB,GPIOCandAFIOclock*/
  45. RCC_APB2PeriphClockCmd(RCC_GPIO_LED,ENABLE);//RCC_APB2Periph_AFIO
  46. /*LEDspinsconfiguration*/
  47. GPIO_InitStructure.GPIO_Pin=GPIO_LED_ALL;
  48. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
  49. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  50. GPIO_Init(GPIO_LED_PORT,&GPIO_InitStructure);
  51. for(;;)
  52. {
  53. }
  54. }
  55. /**
  56. *@briefThisfunctionhandlesSysTickHandler.
  57. *@paramNone
  58. *@retvalNone
  59. */
  60. voidSysTick_Handler(void)
  61. {
  62. staticintcount=0;
  63. count++;
  64. if(count==100)
  65. {
  66. LED_Spark();
  67. count=0;
  68. }
  69. }


需要說(shuō)明的是,若是用 SysTick_Config 函數來(lái)設置SysTick的中斷頻率,時(shí)鐘源就不能人為的指定了,這時(shí)使用的時(shí)鐘源就是內核的頻率。

SystemCoreClock 是個(gè)全局變量,它的值就是內核的運行頻率,不過(guò)前提要調用 SystemInit() 函數來(lái)設置內核的頻率。如果內核的頻率是字節寫(xiě)寄存器來(lái)設置的,SystemCoreClock 的值就不一定對了。



關(guān)鍵詞: STM32F10xSysTick定時(shí)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>