选择好您连接至开发板使用的电脑上的串口, 可以通过搜索串口菜单来自动搜索出你电脑上的串口信息.
在左上方的\程序文件\选择你准备烧入芯片中的代码, 就是前面我们生成的Gpio_Test.Hex.
然后在菜单选项栏上选择 \菜单, 点击 \读STM32器件信息\命令按钮. 我们会在右边的信息框中显示出连接成功的信息: 如图所示:
选择上\校验\和\编程后运行\两个选项后点击\开始编程\会报出程序成功烧入芯片的一些信息, 如下:
------------------------------------------------------------------ DTR电平置高(+3-+12V),复位
RTS置高(+3-+12V),选择进入BootLoader ...延时100毫秒
DTR电平变低(-3--12V)释放复位 RTS维持高
开始连接...3, 接收到:1F
在串口COM4连接成功@115200bps,耗时343毫秒 芯片内BootLoader版本号:2.1 芯片PID:00000410 芯片FLASH容量为128KB
芯片SRAM容量为65535KB(此信息仅供参考,新版本芯片已不包含此信息) 96位的芯片唯一序列号:33006C065839353235581943 读出的选项字节:
A55AFF00FF00FF00FF00FF00FF00FF00
全片擦除成功
第547毫秒,已准备好
共写入2KB,进度100%,耗时4343毫秒 成功从08000000开始运行
www.mcuisp.com向您报告,命令执行完毕,一切正常
----------------------------------------------------------------
这个时候您可以看到您手中的 Mini-STM32 开发板上的两个红色 LED 有规律的轮流点亮, 说明程序已经成功的烧入芯片了.
最后您在断电后将 Mini-STM32 上 J1 的跳线帽跳至 1,2 引脚上, 重新上电后, 程序就可以正常运行了.
MINI-STM32 开发板入门教程 (三) 系统时钟 SysTick
(一) 背景介绍
在传统的嵌入式系统软件按中通常实现 Delay(N) 函数的方法为:
for(i = 0; i <= x; i ++);
x --- 对应于 对应于 N 毫秒的循环值
对于STM32系列微处理器来说,执行一条指令只有几十个 ns,进行 for 循环时,要实现 N 毫秒的 x 值非常大,而且由于系统频率的宽广,很难计算出延时 N 毫秒的精确值。针对 STM32 微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用 Delay(N)。
(二) STM32 SysTick 介绍
Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的 COUNTFLAG 标志会置位,触发中断 (如果中断使能情况下)。
在 STM32 的应用中,使用 Cortex-M3 内核的 SysTick 作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对 N 减一,在Delay(N) 函数中循环检测 N 是否为 0,不为
0 则进行循环等待;若为 0 则关闭 SysTick 时钟,退出函数。
注: 全局变量 TimingDelay , 必须定义为 volatile 类型 , 延迟时间将不随系统时钟频率改变。
(三) ST SysTick 库文件
使用ST的函数库使用systick的方法
1、调用SysTick_CounterCmd() -- 失能SysTick计数器 2、调用SysTick_ITConfig () -- 失能SysTick中断 3、调用SysTick_CLKSourceConfig() -- 设置SysTick时钟源。 4、调用SysTick_SetReload() -- 设置SysTick重装载值。 5、调用SysTick_ITConfig () -- 使能SysTick中断 6、调用SysTick_CounterCmd() -- 开启SysTick计数器
(四) SystemTick 工程实战
外部晶振为 8 MHz,9 倍频,系统时钟为 72MHz,SysTick 的最高频率为9MHz(最大为HCLK / 8),在这个条件下,把 SysTick 效验值设置成9000,将 SysTick 时钟设置为 9 MHz, 就能够产生 1ms 的时间基值,即 SysTick 产生 1ms 的中断。
/* Configure the system clocks */ RCC_Configuration(); SysTick_Configuration();
第一步: 配置 RCC 寄存器 和 SysTick 寄存器
RCC_Configuration: 配置 RCC 寄存器 void RCC_Configuration(void) {
/* RCC system reset(for debug purpose) */ RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS) {
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2); /* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } }
/* Enable GPIOA and AFIO clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO, ENABLE); }
SysTick_Configuration: 配置 SysTick
void SysTick_Configuration(void) {
/* Select AHB clock(HCLK) as SysTick clock source */ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
/* Set SysTick Priority to 3 */
NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0);
/* SysTick interrupt each 1ms with HCLK equal to 72MHz */ SysTick_SetReload(72000);
/* Enable the SysTick Interrupt */ SysTick_ITConfig(ENABLE); }
第二步: 配置 SysTick 中断函数
这里我们定义了一个 TestSig 全局变量, 用于我们使用 Keil 软件自带的逻辑分析仪来分析.