|
发表于 2009-12-15 17:57:30
|
显示全部楼层
我的 SYSTICK 很准确的,,,你用 '马老师'的帖子,,,不用库,,直接用 Stm32_Init.c 做初始化...很好用的...
我最初没注意设置 RCC 的频率,,,学会设置 RCC 时钟之后,,SYSTICK 1000毫秒,,做的方波用频率计测试周期 1.998xxx秒..
#include <stm32f10x_lib.h> // STM32F10x Library Definitions
#include "STM32_Init.h" // STM32 Initialization
#include "..\Stm32F103.h"
void SysTick_Handler(void) {
if ((GPIOB_ODR & 0x00000200) == 0)
GPIOB_BSRR = (1<<9);
else
GPIOB_BSRR = (1<<9+16); //直接在中断里输出 2秒周期的方波..
}
int main(void) {
unsigned int l,m,n,p,q;
BKP_DR0 = 0x1357;
// BKP_DR1 = 0x2468;
FLASH_ACR = 0x11; //使用FLASH 一等待,0x12两等待
RCC_CR = (1<<16); //Open HSE
p = 0;
for(q=0;q<0x1fff;q++) {
p = p + 1;
}
RCC_CFGR = 0x072B4401; //设置MCO输出PLL/2,PLL倍频12(系统时钟72兆)
l = RCC_CR;
RCC_CR = (1<<24); //Open PLL
m = RCC_CR;
for(q=0;q<0xdfff;q++) {
p = p + 1;
}
RCC_CFGR = 0x072B4402; //0x072B440"2"->"A" 切换PLL时钟(72兆)成功
n = RCC_CR;
q = RCC_CFGR;
RCC_AHBENR = 0xffffffff; //Open FLASH,SRAM,DMA;clock
RCC_APB2ENR = 0xffffffff; //Open All clock
RCC_APB1ENR = 0xffffffff; //Open All clock
GPIOA_CRL = 0x88888888;
GPIOA_CRH = 0x8888888B; //让 MCO 输出PLL/2时钟(36兆)
GPIOA_ODR = 0x0000Bfff; //JTCK 为"下拉"
GPIOB_CRL = 0x88883888; //JTDO 为"输出"
GPIOB_CRH = 0x88888833; //PB8,PB9点亮发光二极管(只影响了高8位)
GPIOB_ODR = 0x0000fff7; //JTDO 设置"输出0"
GPIOC_CRL = 0x88888888;
GPIOC_CRH = 0x88888888;
GPIOC_ODR = 0x0000ffff;
GPIOD_CRL = 0x88888888; //晶体振荡器88带上拉也可起振
GPIOD_CRH = 0x88888888;
GPIOD_ODR = 0x0000ffff;
GPIOB_ODR = l+m+n+p+q; //Just Test 不被优化掉
stm32_Init ();
while(1)
{
GPIOB_BSRR = (1<<8);
GPIOB_BSRR = (1<<8+16);
GPIOB_BSRR = (1<<8);
GPIOB_BSRR = (1<<8+16);
GPIOB_BSRR = (1<<8);
GPIOB_BSRR = (1<<8+16);
GPIOB_BSRR = (1<<8);
GPIOB_BSRR = (1<<8+16);
}
} |
|