STM32F103C8开发74HC595串行转并行输出(五)


1、新建项目,选择芯片型号,选中如下库文件:

代码如下:

#include "stm32f10x.h"

#define MOSIO GPIO_Pin_12  //=PA12;
#define R_CLK GPIO_Pin_13  //=PA13;
#define S_CLK GPIO_Pin_14  //=PA14;

void NOP(void)
{
  uint16_t i;
  for (i = 0; i < 20; i++);
}
void Delay(uint32_t nCount)
{
  for (; nCount != 0; nCount--);
}
void HC595SendData(uint8_t SendVal)
{
  uint8_t i;
  for (i = 0; i < 8; i++)
  {
    if (((SendVal << i) & 0x80) != 0 ) GPIO_SetBits(GPIOA, MOSIO);
    else GPIO_ResetBits(GPIOA, MOSIO);

    GPIO_ResetBits(GPIOA, S_CLK);
    NOP();
    GPIO_SetBits(GPIOA, S_CLK);
  }
  GPIO_ResetBits(GPIOA, R_CLK);
  NOP();
  GPIO_SetBits(GPIOA, R_CLK);
}

int main()
{
  uint8_t i = 0x00;
  GPIO_InitTypeDef GPIO_InitS;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

  GPIO_InitS.GPIO_Pin = GPIO_Pin_All;
  GPIO_InitS.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitS);
  GPIO_Write(GPIOA, 0xffff);
  while (1)
  {
    i = (i + 1) % 8;
    HC595SendData((0x01 << i));
    Delay(0x3FFFFF);
  }
}


你可能感兴趣的:(STM32单片机学习)