主程序: #include "stm32f10x.h" #include <includes.h> #include<zimou.h> #include <led_scan.h> GPIO_InitTypeDef GPIO_InitStructure; //声明GPIO_InitStructure为DPIO的结构体 u8 weixuan[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /*位选段码*/ u8 num; void GPIO_Configuration(void); void RCC_Configuration(void); void Delay (uint32_t nCount); int main(void) { GPIO_Configuration(); RCC_Configuration(); CLR_MR; set_OE1; set_OE2; set_MR; CLR_OE1; CLR_OE2; while (1) { for(num=0;num<16;num++) { Write_HC595_8Byte_one(zimou[2*num]); Write_HC595_8Byte_one(zimou[2*num+1]);//行数据 Write_HC595_8Byte_two(weixuan[(2*num)/8]); Write_HC595_8Byte_two(weixuan[(2*num+1)/8]); //列数据 Delay(500); } } } /******************************************************************************* * Function Name : GPIO_Configuration * Description : Configure GPIO Pin * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void GPIO_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE); //在设置外设前,我们必须给它调用一个时钟函数来使能外设时钟 //GPIO在APB2上 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7| GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设为推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化外设GPIOE } /*****************************************************************************/ void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; /* 定义枚举类型变量 HSEStartUpStatus */ RCC_DeInit(); /* 复位系统时钟设置 */ RCC_HSEConfig(RCC_HSE_ON);/* 开启HSE */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* 等待HSE 起振并稳定 */ if(HSEStartUpStatus == SUCCESS) /* 判断HSE 起是否振成功,是则进入 if()内部 */ { RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 选择HCLK(AHB)时钟源为SYSCLK 1 分频 */ RCC_PCLK2Config(RCC_HCLK_Div1); /* 选择PCLK2 时钟源为 HCLK(AHB) 1分频 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* 选择PCLK1 时钟源为 HCLK(AHB) 2分频 */ FLASH_SetLatency(FLASH_Latency_2); /* 设置FLASH 延时周期数为2 */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 使能FLASH 预取缓存 */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* 选择锁相环(PLL)时钟源为HSE 1 分频,倍频数为 9,则 PLL输出频率为 8MHz * 9 = 72MHz */ RCC_PLLCmd(ENABLE); /* 使能PLL */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 等待PLL输出稳定 */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 选择SYSCLK 时钟源为PLL */ while(RCC_GetSYSCLKSource()!= 0x08); /* 等待PLL成为 SYSCLK时钟源 */ } } /************************************************************************* *延时函数 **************************************************************************/ void Delay (uint32_t nCount) { for(; nCount != 0; nCount--); } /************************************************************************/ led_scan.h中的定义: #ifndef __LED_SCAN_H #define __LED_SCAN_H #include "stm32f10x.h"
#define set_MR GPIO_SetBits(GPIOE, GPIO_Pin_12) #define CLR_MR GPIO_ResetBits(GPIOE, GPIO_Pin_12) //MR=0 主复位 #define set_DS1 GPIO_SetBits(GPIOE, GPIO_Pin_7) //串行数据输入 #define CLR_DS1 GPIO_ResetBits(GPIOE, GPIO_Pin_7) #define set_DS2 GPIO_SetBits(GPIOE, GPIO_Pin_13) //串行数据输入 #define CLR_DS2 GPIO_ResetBits(GPIOE, GPIO_Pin_13) #define set_SHCP GPIO_SetBits(GPIOE, GPIO_Pin_9) // 移位寄存器时钟输入 #define CLR_SHCP GPIO_ResetBits(GPIOE, GPIO_Pin_9) // 移位寄存器时钟输入 #define set_OE1 GPIO_SetBits(GPIOE, GPIO_Pin_8) #define CLR_OE1 GPIO_ResetBits(GPIOE, GPIO_Pin_8) //输出使能 #define set_OE2 GPIO_SetBits(GPIOE, GPIO_Pin_11) #define CLR_OE2 GPIO_ResetBits(GPIOE, GPIO_Pin_11)//输出使能 #define set_STCP1 GPIO_SetBits(GPIOE, GPIO_Pin_14) #define CLR_STCP1 GPIO_ResetBits(GPIOE, GPIO_Pin_14)//存储寄存器时钟输入 #define set_STCP2 GPIO_SetBits(GPIOE, GPIO_Pin_10) #define CLR_STCP2 GPIO_ResetBits(GPIOE, GPIO_Pin_10) void Write_HC595_8Byte_one(u8 data); void Write_HC595_8Byte_two(u8 data1); #endif led_scan.c中的定义: #include "stm32f10x.h" #include <led_scan.h> /************************************************************************************************************/ 函 数 名:void Write_HC595_8Byte_one(u8 data) ? 函数功能:向移位寄存器74HC595发送8字节的串行数据 //行数据 入 参:行数据 出 参:无 ***********************************************************************************************************/ void Write_HC595_8Byte_one(u8 data) { u8 i,temp; temp=data; CLR_STCP1; CLR_SHCP; for(i=0;i<8;i++) { CLR_SHCP; if(temp & 0x80) {set_DS1; } else {CLR_DS1;} set_SHCP; //上升沿发生移位 temp<<=1; } set_STCP1; CLR_SHCP; CLR_STCP1; } /************************************************************************************************************ 函 数 名:void Write_HC595_8Byte_onetwo(u8 data1) ? 函数功能:向移位寄存器74HC595发送8字节的串行数据 //列数据 入 参:行数据 出 参:无 ***********************************************************************************************************/ void Write_HC595_8Byte_two(u8 data1) { u8 i,temp; temp=data1 ; CLR_STCP2; CLR_SHCP; for(i=0;i<8;i++) { CLR_SHCP; if(temp & 0x80) { set_DS2; } else { CLR_DS2; } set_SHCP; //上升沿发生移位 temp<<=1; } set_STCP2; CLR_SHCP; CLR_STCP2; }
编译会出现这样的错误:..\USER\led_scan.h(22): error: #65: expected a ";" ..\USER\main.c(26): warning: #223-D: function "Write_HC595_8Byte_one" declared implicitly 纠结了半天了,都查不出问题所在,求高手指导啊!!!!!
|