#include "stm32f10x.h" void SysTick_Init(void); void Delay_us(__IO u32 nTime); static __IO u32 TimingDelay; void TimingDelay_Decrement(void); int main() { int i,j,num1,num2; u8 num[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67}; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE); SysTick_Init(); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = 0xff; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIOA×÷Ϊ¶ÎÑ¡ GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB×÷Ϊλ //µÍµçƽѡ룬£¨¹²ÒõÊýÂë¹Ü£© // while(1) { for(num1=0;num1<10;num1++) { for(num2=0;num2<10;num2++) { for(j=0;j<50;j++) { GPIOB->ODR=0x1; GPIOA->ODR=num[num1]; Delay_us(1); GPIOB->ODR=0x3; GPIOB->ODR=0x2; GPIOA->ODR=num[num2]; Delay_us(1); GPIOB->ODR=0x3; } } } } } void SysTick_Init(void) { if(SysTick_Config(SystemCoreClock /1000)) { while(1); } SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } void Delay_us(__IO u32 nTime) { TimingDelay = nTime; SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; while(TimingDelay != 0); } void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } }
其中systick得使用要注意要添加中断
在stm32f10x_it.c里声明
extern void TimingDelay_Decrement(void);
并加入
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
硬件连线: