logo资料库

stm32 跑马灯实验的代码和详细说明.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
伙伴 stm32 交流群为您 stm32 入门提供最好的服务 QQ 群:84975845 Stm32 跑马灯实验: 首先要配置 stm32 的系统时钟 #include "stm32f10x_lib.h" #include "sys.h" /*白痴天才梦 stm32 开发板 完全傻瓜式的教程,手把手帮你突破嵌入式的障碍*/ /*RCC 时钟初始化函数*/ void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); //定义错误状态类型 //重新配置 RCC 为默认值 //设置外部高速晶振 //等待外部晶振起振 if (HSEStartUpStatus == SUCCESS) { //判断是否起振成功 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能 flash 预取指缓 存 FLASH_SetLatency(FLASH_Latency_2); //设置 flash 代码延 时周期数 RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); 时钟 时钟 //设置 HCLK 时钟 //设置 PCLK2 //设置 PCLK1 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //设置 PLL 时钟 源以及倍频系数 RCC_PLLCmd(ENABLE); //使能 PLL 时 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //等待 PLL 初始化 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置系统 时 while (RCC_GetSYSCLKSource() != 0x08); // 等待系统时钟设 钟 成功 钟 置成功 } } 准备一个延时函数 void delay_init(u8 SYSCLK) { SysTick->CTRL&=0xfffffffb;//bit2 清空,选择外部时钟 HCLK/8
fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000; } //延时 nms //注意 nms 的范围 //SysTick->LOAD 为 24 位寄存器,所以,最大延时为: //nms<=0xffffff*8*1000/SYSCLK //SYSCLK 单位为 Hz,nms 单位为 ms //对 72M 条件下,nms<=1864 void delay_ms(u16 nms) { u32 temp; SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD 为 24bit) SysTick->VAL =0x00; SysTick->CTRL=0x01 ; do { //清空计数器 //开始倒数 temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 SysTick->CTRL=0x00; SysTick->VAL =0X00; //关闭计数器 //清空计数器 } //延时 nus void delay_us(u32 nus) { u32 temp; SysTick->LOAD=nus*fac_us; //时间加载 SysTick->VAL=0x00; SysTick->CTRL=0x01 ; do { //清空计数器 //开始倒数 temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//等待时间到达 SysTick->CTRL=0x00; SysTick->VAL =0X00; //关闭计数器 //清空计数器 } 然后要配置 LED 所对应的 GPIO void led_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //定义一个 GPIO 结构体 //使能 GPIOA 时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //为 GPIO 结构体的 pin 组员 赋值为 LED 所对应的引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //设置 GPIO 的模式 //设置 GPIO 的频率 //把 GPIOA 配置为以上配置 } 最后进入主题 /*跑马灯函数*/ void led_test(void) { while(1) { GPIO_ResetBits(GPIOA,GPIO_Pin_8); //设置 GPIOA 的 PIN8 为低 delay_ms(300); GPIO_SetBits(GPIOA,GPIO_Pin_8); PIN8 为高 delay_ms(300); //延时 // 设 置 GPIOA 的 //延时 } } int main(void) { RCC_Configuration(); delay_init(72); led_gpio_init(); led_test(); return 0; }
分享到:
收藏