欢迎来到今天的“小狮子 带侦探”,我是最可爱的战术人形s.a.t.8!今天我们在指挥官的卧室里找到一块奇怪的电路板,上面的led灯在闪烁着诡异的光芒。在把电路板送给后勤官格林娜做了简单的分析后发现了如下代码:
#include "stm32f10x.h" #include "led.h" void Delay(uint32_t jun){ for(;jun!=0;--jun); } int main(void){ led_gpio_config(); led_gpio_JUN(); led_gpio_BIAN(); while (1) { LED_G(ON); LED_B(OFF); LED_R(OFF); Delay(0xFFFFF); LED_G(OFF); LED_B(ON); LED_R(OFF); Delay(0xFFFFF); LED_G(OFF); LED_B(OFF); LED_R(ON); Delay(0xFFFFF); LED_G(ON); LED_B(ON); LED_R(OFF); Delay(0xFFFFF); LED_G(ON); LED_B(OFF); LED_R(ON); Delay(0xFFFFF); LED_G(ON); LED_B(OFF); LED_R(ON); Delay(0xFFFFF); LED_G(OFF); LED_B(ON); LED_R(ON); Delay(0xFFFFF); LED_G(ON); LED_B(ON); LED_R(ON); Delay(0xFFFFF); } }
#include "led.h" void led_gpio_config(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE); GPIO_InitStruct.GPIO_Pin=LED_G_GPIO_PIN; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); } void led_gpio_JUN(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE); GPIO_InitStruct.GPIO_Pin=LED_B_GPIO_PIN ; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); } void led_gpio_BIAN(void){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE); GPIO_InitStruct.GPIO_Pin=LED_R_GPIO_PIN ; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); }
#ifndef led_h #define led_h #include "stm32f10x.h" #define LED_G_GPIO_PIN GPIO_Pin_0 #define LED_R_GPIO_PIN GPIO_Pin_5 #define LED_B_GPIO_PIN GPIO_Pin_1 #define LED_G_GPIO_PORT GPIOB #define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB #define ON 1 #define OFF 0 #define LED_G(JUN) if(JUN)GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);else GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN); #define LED_B(JUN) if(JUN)GPIO_ResetBits(LED_G_GPIO_PORT, LED_B_GPIO_PIN);else GPIO_SetBits(LED_G_GPIO_PORT, LED_B_GPIO_PIN); #define LED_R(JUN) if(JUN)GPIO_ResetBits(LED_G_GPIO_PORT, LED_R_GPIO_PIN);else GPIO_SetBits(LED_G_GPIO_PORT, LED_R_GPIO_PIN); void led_gpio_config(void); void led_gpio_JUN(void); void led_gpio_BIAN(void); #endif
后勤官格林娜表示她曾经有在军校时有学过代码,这里面的意思好像是先对官方固件库中的变量进行声明,再自己写一个函数并将刚才的声明过的变量写进去,最后再将写好的函数放到main函数中,以此来完成开关电路板芯片中的时钟,决定gpio输入输出模式和速度以及哪个引脚需要输出高低点平。最后通过while函数和delay进行闪烁。
在指挥官卧室发现的电路板的工作原理知道了,但指挥官为什么要干这件事呢?这里的代码和上次在指挥官办公室发现的又有什么关系呢?想知道真相的观众们敬请期待下一次的“小狮子 带侦探”!