实验1 STM32开发环境建立一、 实验目的1、 掌握嵌入式开发环境的搭建2、 熟悉MINI STM32开发板的基本使用二、 实验内容1、 检查MINI STM32开发板的完整性1) ALIENTEK MINI STM32开发板底板一个2) ALIENTEK 2.8寸 TFTLCD模块一个3) 5P MINI USB 数据线一条2、 上电检测开发板能否正常工作,注意两个USB口的区别3、 串口驱动的安装4、 KEIL C软件的安装和使用5、 JLINK驱动的安装6、 跑马灯的实验三、 实验设备硬件: PC机 一台 MINI STM32开发板 一套软件: RVMDK V3.8 一套 Windows XP 一套四、 实验步骤1、 检查开发板完整、正常与否;2、 安装开发软件及驱动,并调试;3、 熟悉固件库,编写代码实现跑马灯功能 1)给工程新增HARDWARE组 程序里main()函数非常简单,先调用delay_init()初始化延时,接着就是调用LED_Init()来初始化GPIOA和GPIOD为输出最后在死循环里面实现LED0和LED1交替闪烁,间隔为300ms。
程序见附录 2) 写好程序以后,就编译,看看有没有错误如果没有错误的话就下载到STM32板子上五、 实验结果和实验总结 实验最后实现了流水灯的运转 这次实验主要是让我们了解一下STM32开发板的基本使用,大部分人都是初次接触这个开发板和KEILC软件,都对软件操作不太了解,希望通过这几次实验能够了解并熟练地使用这个软件,用这个软件来编程和完成一些功能的实现附录C语言代码:(主要功能的)//初始化端口 void LED_Init(void) { RCC->APB2ENR|=1<<2; //使能PORTA时钟 RCC->APB2ENR|=1<<5; //使能PORTD时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003;//PA8 推挽输出 GPIOA->ODR|=1<<8; //PA8 输出高 GPIOD->CRL&=0XFFFFF0FF; GPIOD->CRL|=0X00000300;//PD.2推挽输出 GPIOD->ODR|=1<<2; //PD.2输出高 }//延时nmsvoid 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; //清空计数器 } //初始化延迟函数//SYSTICK的时钟固定为HCLK时钟的1/8//SYSCLK:系统时钟void delay_init(u8 SYSCLK){ SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8 fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000;} //系统时钟初始化函数void Stm32_Clock_Init(u8 PLL){ unsigned char temp=0; MYRCC_DeInit(); //复位并配置向量表 RCC->CR|=0x00010000; //外部高速时钟使能HSEON while(!(RCC->CR>>17));//等待外部时钟就绪 RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1; PLL-=2;//抵消2个单位 RCC->CFGR|=PLL<<18; //设置PLL值 2~16 RCC->CFGR|=1<<16; //PLLSRC ON FLASH->ACR|=0x32; //FLASH 2个延时周期 RCC->CR|=0x01000000; //PLLON while(!(RCC->CR>>25));//等待PLL锁定 RCC->CFGR|=0x00000002;//PLL作为系统时钟 while(temp!=0x02) //等待PLL作为系统时钟设置成功 { temp=RCC->CFGR>>2; temp&=0x03; } } //主函数int main(void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 LED_Init(); //初始化与LED连接的硬件接口 while(1) { LED0=0; LED1=1; delay_ms(300); LED0=1; LED1=0; delay_ms(300); } }。