STM32学习第五天—看了CT117E比赛版的硬件结构

  • Post author:
  • Post category:其他


昨天好歹了解了下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);
    }
}



版权声明:本文为Adrian_1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。