版權聲明:本文爲博主原創文章,轉載註明出處。 https://blog.csdn.net/Adrian_1/article/details/50090089
昨天好歹瞭解了下stm32的一些個固件庫,這就說明要開啓固件庫編程。但是我看的那個視頻他用的開發板跟我這個不一樣,我用的是藍橋杯的“嵌入式系統設計”的國信長天的CT117E開發板,所以我自己又拿出我的板原理圖看了看(看了好半天也沒看出啥,實在不喜歡看這東西)。差不多知道PA,PB,PC這幾個通用I/O口的分別對應的功能了。然後就是自己編寫了一個流水燈的代碼(額,是在看懂別人的代碼基礎上自己編寫的)。一開始我就搞不懂,爲什麼非要弄個鎖存器在那鎖來鎖去的搞什麼飛機。到一個羣裏問他們why,給我的回答是,不懂基本原理學單片機真是可怕,不過最後還是弄懂了點。加個鎖存器是爲了節省I/O口,就是控制LED的這幾個i/o可以拿去幹別的事情通過鎖存器而不會影響到I/O口。(大概就是這樣子了)。
Gxc_ct117e_led流水燈 的 代碼:
#include "stm32f10x.h"
#include "led.h"
void LED_Control(uint16_t LED, uint8_t LED_Status)
void LED_Init(void);
int main()
{
unsigned int i;
char j = 8;
LED_Init();
LED_Control(LEDALL, 0);
while (1)
{
LED_Control(1 << j, 1);
for (i = 0x3fffff; i > 0; i--)
LED_Control(1 << j, 0);
for (i = 0x3fffff; i > 0; i--)
j = (++j == 16) ? 8 : j;
}
}
void LED_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
//LED引腳配置, PC08~PC15 對應 H_D0~H_D7
GPIO_InitStructure.GPIO_Pin = LED0 | LED1 |LED2 | LED3 |LED4 | LED5 | LED6 | LED7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//74HC573鎖存引腳配置,PD2 對應 N_LE
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void LED_Control(uint16_t LED, uint8_t LED_Status)
{
if (LED_Status == 0)
{
GPIO_SetBits(GPIOC, LED);
GPIO_SetBits(GPIOD, GPIO_Pin_2); //開鎖存器
GPIO_ResetBits(GPIOD, GPIO_Pin_2); //關, 鎖存狀態
}
else
{
GPIO_ResetBits(GPIOC, LED);
GPIO_SetBits(GPIOD, GPIO_Pin_2);
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
}
}