学习日志 姓名:孔令斌 日期:2018.7.24
今日学习任务 | 完成4个LED灯的点亮程序 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量) | 今日任务已经成功按计划完成,成功编译出可以实现LED灯循环点亮的程序 |
今日开发中出现的问题汇总 | 刚开始对软件不了解,遗漏了一项设置导致LED灯一直不亮,在询问别的小组成员后,我们小组才发现错误。
|
今日未解决问题 | 无 |
今日开发收获 | 1.了解了STM32的基本信息 2.学会了使用固件库 3.学会了利用STM32来循环点亮LED灯 |
自我评价 (是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等) | 今天的成功编译出一个利用STM32的程序,这让我们对此有了更进一步的了解,但依旧有些地方没搞懂,需要加深学习 |
其他 | 无 |
任务一:设计循环点亮LED灯
#include "stm32f4xx.h"
void delay(unsigned int time)
{
unsigned int n=8*time;
while(n--);
}
unsigned int i = 2;
int main(void)
{
//1、开启时钟
RCC_AHB1ENR |= (1 << 2);
//2、设置对应的io口的模式
GPIOC_MODER &= ~(3 << 2); //清零
GPIOC_MODER &= ~(3 << 4);
GPIOC_MODER &= ~(3 << 6);
GPIOC_MODER &= ~(3 << 8);
GPIOC_MODER |= (1 << 2); //置1,输出
GPIOC_MODER |= (1 << 4);
GPIOC_MODER |= (1 << 6);
GPIOC_MODER |= (1 << 8);
//3、输出模式选择
GPIOC_OTYPER &= ~(1 << 1); //推挽
GPIOC_OTYPER &= ~(1 << 2);
GPIOC_OTYPER &= ~(1 << 3);
GPIOC_OTYPER &= ~(1 << 4);
//4、输出速度选择,50MHz
GPIOC_OSPEEDR &= ~(3 << 2); //清零
GPIOC_OSPEEDR &= ~(3 << 4);
GPIOC_OSPEEDR &= ~(3 << 6);
GPIOC_OSPEEDR &= ~(3 << 8);
GPIOC_OSPEEDR |=(2 << 2); //选择50MHz
GPIOC_OSPEEDR |=(2 << 4);
GPIOC_OSPEEDR |=(2 << 6);
GPIOC_OSPEEDR |=(2 << 8);
while(1)
{
//5、输出数据寄存器,控制管脚的电平高低,从而控制灯的亮灭
GPIOC_ODR |= (1 << 1); //蓝灯置高电平,亮
delay(100000);
GPIOC_ODR &= ~(1 << 1); //熄灭蓝灯
GPIOC_ODR |= (1 << 2); //点亮黄灯
delay(100000);
GPIOC_ODR &= ~(1 << 2);
GPIOC_ODR |= (1 << 3);
delay(100000);
GPIOC_ODR &= ~(1 << 3);
GPIOC_ODR |= (1 << 4);
delay(100000);
GPIOC_ODR &= ~(1 << 4); //熄灭绿灯
GPIOC_ODR |= (1 << 1); //点亮蓝灯
delay(100000);
}
}
void SystemInit(void)
{
}