由于Cnblogs使用livewriter发表文章排版比较方便,因此最近的博客首先通过cnblogs发表。
原创文章,转载请注明出处。
欢迎大家针对本博客文章提出宝贵意见。
关于使用固件库建立工程请参考
使用Keil MDK以及标准外设库创建STM32工程
关于固件库的学习请参考
STM32固件库详解
1.1.1 使用Keil MDK运行第一个STM32F10X程序
在上一小节中已经详细介绍了使用Keil MDK和标准外设库创建一个工程的过程,下面将介绍基于这个工程来编写一个小程序,通过这个程序我们可以初步了解:
l STM32标准外设库的简单使用过程
l STM32外设的使用方法和大致流程
l 程序的编译、链接、下载步骤
l 利用Keil MDK的在线仿真功能进行软件仿真的简要步骤
1. 程序的编写
(1)程序实现的功能
为了方便各位读者的入门和理解,这个小程序的功能非常简单,作为本书功能实践的第一个程序,其功能当然也是最为经典的“Hello World!”了,只不过不是简单的屏幕输出,而是利用硬件的串口进行输出,同时作为单片机类的第一个程序自然少不了LED闪烁的功能,这就是这个小程序的两个主要的功能:
l 利用串口1输出“Hello World!”字符。
l 控制两个LED闪烁。
(2)程序的实现
在基于标准外设库进行程序开发时一定要充分利用标准外设库下面的帮助文件stm32f10x_stdperiph_lib_um.chm以及库中自带的工程实例,同时结合STM32F10x系列的芯片手册来完成程序的开发,stm32f10x_stdperiph_lib_um.chm帮助文件如图 5‑25所示。此文件中已经包含了标准外设库的全部内容,并根据根据内容结构进行了重新的编排和整理,更加方便程序的阅读和理解。
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples文件夹下包括了众多外设的使用例程,这里的例程多是针对官方的开发板而编写,然而这些例程却非常全面的展示了相关外设的各种使用方法,对我们做基于标准外设库的开发有着非常重要的意义。
图 5‑25 标准外设库的帮助文档
我们的第一个程序就通过这些参考来完成,首先来看串口部分。串口部分的详细信息可以参考本书第8章,这儿只进行简单的说明和介绍简便的开发方法,首先先找一个与我们使用的功能最近的一个例程,STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART文件夹下给出了多达12中的USART例程,这里选择较为相近的Interrupt文件夹下得例程,打开文件夹下面的mian.c文件,通过简单的浏览可以找到如下一段程序:
/* USARTy and USARTz configuration ------------------------------------------------------*/
/* USARTy and USARTz configured as follow:
- BaudRate = 9600 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure USARTy */
USART_Init(USARTy, &USART_InitStructure);
/* Configure USARTz */
USART_Init(USARTz, &USART_InitStructure);
/* Enable USARTy Receive and Transmit interrupts */
USART_ITConfig(USARTy, USART_IT_RXNE, ENABLE);
USART_ITConfig(USARTy, USART_IT_TXE, ENABLE);
/* Enable USARTz Receive and Transmit interrupts */
USART_ITConfig(USARTz, USART_IT_RXNE, ENABLE);
USART_ITConfig(USARTz, USART_IT_TXE, ENABLE);
/* Enable the USARTy */
USART_Cmd(USARTy, ENABLE);
/* Enable the USARTz */