在 Mini-STM32 开发板上有两个 LED 灯, 分别是 PA0, PA1. 我们做个流水灯程序, 让他们循环点亮. while(1) {
GPIO_SetBits(GPIOA,GPIO_Pin_0); Delay(100);
GPIO_ResetBits(GPIOA,GPIO_Pin_0); Delay(100);
GPIO_SetBits(GPIOA,GPIO_Pin_1); Delay(100);
GPIO_ResetBits(GPIOA,GPIO_Pin_1); Delay(100); }
(五) 仿真调试
把工程便宜通过后, 进入软件仿真
如下图所示:点击工程快捷菜单的逻辑分析仪
在逻辑分析仪中我们点击 Setup 按键会弹出安装对话框.
点右上方的 \新建\图标, 在菜单中输入 \这个全局变量.
添加完之后就可以点 Close 了. 如果您仿真完可以点击 左下方的 \删除所有监视变量.
16
全速运行后就可以看到下面的波形了哦
17
如果你使用仿真器在 Mini-STM32 上调试的话你还可以看到两个 LED 在跑跑马灯程序了. 到此我们这章节的教程就结束了, 相信大家也掌握了 System Tick 的用法了.
(四) GPIO简单应用和外部中断
这个章节我们将学习最基本的 STM32 的 GPIO 的应用. 我们将分为两个章节来学习.
第一部份: GPIO 的基本应用和 IO 口的配置 第二部份: 外部中断的使用
--------------------------------------------------------------------------
1: 设计要求:
开发板上有 2 个 LED, 我们的目的为有规律的点亮 LED1 和 LED2. 当按键按下去的时候所有的灯灭, 等待 2 秒钟后恢复有规律的点亮.
18
2: 硬件电路:
3: 软件程序设计:
(1) 根据要求配置 GPIOA 中的 PA0,PA1 为输出, PA3, PA8 为输入
对于下面程序中的 GPIO_InitStructure.GPIO_Speed 和 GPIO_InitStructure.GPIO_Mode 推荐大家看下面两篇文章.
STM32 GPIO的十大优越功能综述
备注: 当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
STM32 GPIO端口的输出速度设置
备注: 共有8种模式,可以通过编程选择: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入
5. 开漏输出——(此模式可实现hotpower说的真双向IO) 6. 推挽输出
7. 复用功能的推挽输出 8. 复用功能的开漏输出
模式7和模式8需根据具体的复用功能决定。
void GPIO_Configuration(void)
19
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Configure PA. as Output push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, GPIO_InitStructure);
/* Configure PA3,PA8 as input floating (EXTI Line3 , EXTI Line8) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); }
(2) 打开 GPIOA 的时钟, 因为 STM32 是一个低功耗的 MCU , 每一个你使用的外围设备都需要单独开启时钟, 如果不开启将不能使用, 这个也是对于 STM32 初学者容易疏忽的地方
/* Enable GPIOA and AFIO clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO, ENABLE);
STM32共有5种时钟源,其中三种不同的时钟源可用作为驱动系统时钟(SYSCLK);
1、HSI 由内部8MHz RC振荡器产生,它是可以直接用来作为系统时钟或经2分频后作为PLLSRC输入。
HIS时钟频率在出厂时被校准在1%(25°C),在系统复位时,工厂校准值会被装载到时钟控制寄存器的HISCAL[7..0] 位。
用户可以通过更改HISCAL[4..0]来调整HSI频率。 另外时钟寄存器中有一个HSIRDY位用来指示HSI RC是不稳定工作,在时钟启过后,直到这个标志位置被硬件置1后,HSI RC时钟才被输出。
HSI RC时钟还可以用时钟寄存器中的HSION位来启动和关闭。
HSI时钟同时也是HSE晶体荡振器的备用时钟源。
使用HSE时钟,程序设置时钟参数流程:
1、将RCC寄存器重新设置为默认值 RCC_DeInit;
2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4、设置AHB时钟 RCC_HCLKConfig; 5、设置高速AHB时钟 RCC_PCLK2Config; 6、设置低速速AHB时钟 RCC_PCLK1Config; 7、设置PLL RCC_PLLConfig;
8、打开PLL RCC_PLLCmd(ENABLE);
9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
20