stm32之595(spi芯片)-阿里云开发者社区

开发者社区> 天色渐晚> 正文

stm32之595(spi芯片)

简介:   595是一款串转并的芯片;  (三极管的功能) 1 /*Include---------------------------*/ 2 #include"stm32f10x_lib.h" //包含所有的头文件 3 #include 4 5 //--...
+关注继续查看

  595是一款串转并的芯片;  (三极管的功能)

  1 /*Include---------------------------*/
  2 #include"stm32f10x_lib.h"        //包含所有的头文件
  3 #include<stdio.h>
  4 
  5 //----------------函数声明--------------------
  6 void Delay_MS(u16 dly);
  7 void RCC_Configuration(void);
  8 void GPIO_Configuration(void);
  9 
 10 
 11 /*******************************************************************************
 12 * Function Name  : main
 13 * Description    : Main program.
 14 * Input          : None
 15 * Output         : None
 16 * Return         : None
 17 *******************************************************************************/ 
 18 int main(void)
 19 {
 20     u8  data, i;
 21     #ifdef DEBUG
 22     debug();
 23     #endif
 24     //------------初始化------------
 25     RCC_Configuration();
 26     GPIO_Configuration();
 27 
 28     //------------数码管控制-----------
 29 //smgA1----PC8
 30 //RCK----PA1
 31 //SCK0---SPISCK----PA5
 32 //MISO0-----PA6
 33 //MOSI0-----PA7
 34 //595_nCS----PA0
 35     //PC8 =0;
 36     //SCK0 上升沿; MOSI0:数据输出;
 37     //595_nCS 为0,要送的目标数据是00100101
 38      //RCK上升沿进行锁存;
 39     GPIO_ResetBits(GPIOC, GPIO_Pin_8);
 40     GPIO_ResetBits(GPIOA, GPIO_Pin_0);
 41 
 42     data = 0x25;
 43      for(i=0;i<8;++i)
 44     {
 45         GPIO_ResetBits(GPIOA, GPIO_Pin_5);    //PB5清零
 46         if((data&0x01) == 0x01)              //注意,595是先送 低位 过去;
 47             GPIO_ResetBits(GPIOA, GPIO_Pin_7);
 48         else
 49             GPIO_SetBits(GPIOA, GPIO_Pin_7);
 50         data>>=1;    //右移一位并赋值给data
 51         GPIO_SetBits(GPIOA, GPIO_Pin_5);    //PB5置1,为了产生上升沿    
 52     }
 53 
 54     GPIO_ResetBits(GPIOA, GPIO_Pin_1);  //产生上升沿
 55     Delay_MS(10);
 56     GPIO_SetBits(GPIOA, GPIO_Pin_1);
 57 
 58 
 59 
 60 
 61 //    GPIO_SetBits(GPIOE, GPIO_Pin_11);
 62 //    data = 0x30;
 63 //    for(i=0;i<8;++i)
 64 //    {
 65 //        GPIO_ResetBits(GPIOB, GPIO_Pin_5);    //PB5清零
 66 //        if((data&0x80) == 0x00)
 67 //            GPIO_ResetBits(GPIOE, GPIO_Pin_10);
 68 //        else
 69 //            GPIO_SetBits(GPIOE, GPIO_Pin_10);
 70 //        data<<=1;    //左移一位并赋值给data
 71 //        GPIO_SetBits(GPIOB, GPIO_Pin_5);    //PB5置1,为了产生上升沿    
 72 //    }
 73 //
 74 //
 75 //    while(1)
 76 //    {
 77 //        GPIO_SetBits(GPIOA, GPIO_Pin_3);
 78 //        Delay_MS(1000);
 79 //        GPIO_ResetBits(GPIOA, GPIO_Pin_3);
 80 //        Delay_MS(1000);    
 81 //    }
 82         
 83 }
 84 
 85 /*******************************************************************************
 86 * Function Name  : Delay_Ms
 87 * Description    : delay 1 ms.
 88 * Input          : dly (ms)
 89 * Output         : None
 90 * Return         : None
 91 *******************************************************************************/
 92 void Delay_MS(u16 dly)
 93 {
 94     u16 i,j;
 95     for(i=0;i<dly;i++)
 96         for(j=1000;j>0;j--);
 97 }
 98 
 99 /*******************************************************************************
100 * Function Name  : RCC_Configuration
101 * Description    : Configures the different system clocks.
102 * Input          : None
103 * Output         : None
104 * Return         : None
105 *******************************************************************************/
106 void RCC_Configuration(void)
107 {
108     //----------使用外部RC晶振-----------
109     RCC_DeInit();            //初始化为缺省值
110     RCC_HSEConfig(RCC_HSE_ON);    //使能外部的高速时钟 
111     while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);    //等待外部高速时钟使能就绪
112     
113     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);    //Enable Prefetch Buffer
114     FLASH_SetLatency(FLASH_Latency_2);        //Flash 2 wait state
115     
116     RCC_HCLKConfig(RCC_SYSCLK_Div1);        //HCLK = SYSCLK
117     RCC_PCLK2Config(RCC_HCLK_Div1);            //PCLK2 =  HCLK
118     RCC_PCLK1Config(RCC_HCLK_Div2);            //PCLK1 = HCLK/2
119     RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);    //PLLCLK = 8MHZ * 9 =72MHZ
120     RCC_PLLCmd(ENABLE);            //Enable PLLCLK
121 
122     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    //Wait till PLLCLK is ready
123     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //Select PLL as system clock
124     while(RCC_GetSYSCLKSource()!=0x08);        //Wait till PLL is used as system clock source
125     
126     //---------打开相应外设时钟--------------------
127     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使能APB2外设的GPIOA的时钟
128     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);             
129 }
130 
131 /*******************************************************************************
132 * Function Name  : GPIO_Configuration
133 * Description    : 初始化GPIO外设
134 * Input          : None
135 * Output         : None
136 * Return         : None
137 *******************************************************************************/
138 void GPIO_Configuration(void)
139 {
140     //CLK:PB5  CLR:PE11 DATA:PE10
141     
142 //smgA1----PC8
143 //RCK----PA1
144 //SCK0---SPISCK----PA5
145 //MISO0-----PA6
146 //MOSI0-----PA7
147 //595_nCS----PA0
148 
149     GPIO_InitTypeDef    GPIO_InitStructure;        //声明一个结构体变量
150     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5|GPIO_Pin_7;     //选择PB.5
151     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
152     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //输出模式为推挽输出
153     GPIO_Init(GPIOA,&GPIO_InitStructure);                 //初始化GPIOB寄存器
154     
155     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;     //选择PE.10 PE.11
156     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
157     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //输出模式为推挽输出
158     GPIO_Init(GPIOA,&GPIO_InitStructure);                 //初始化GPIOE寄存器
159    
160        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;     //选择PB.5
161     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //管脚频率为50MHZ
162     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //输出模式为推挽输出
163     GPIO_Init(GPIOC,&GPIO_InitStructure);                 //初始化GPIOB寄存器
164         
165     //开启时钟    必须在RCC_Configuration中设置        
166 }

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
STM32/GD32芯片信息
因为需要自动适配芯片进行系统配置,所以我们有必要通过读取一些系统寄存器来获取必要信息。我们的代码需要兼容STM32F1/GD32F1/STM32F0/STM32F4代码如下: #ifdef STM32F0XX void* p = (void*)0x1FFFF7AC; #el...
1240 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
12070 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
11817 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11888 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7361 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4498 0
+关注
天色渐晚
既然选择远行,便只顾风雨兼程!
442
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载