stm32之595(spi芯片)

  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 }

 

时间: 2024-09-20 18:18:36

stm32之595(spi芯片)的相关文章

stm32 ds1302-stm32对ds1302的操作怎么写程序

问题描述 stm32对ds1302的操作怎么写程序 要做一个关于时钟的小系统,用stm32做主控芯片,之前用的是51不知道现在该怎么写程序,希望有大神能帮帮忙帮帮忙 解决方案 stm8及DS1302的一些操作 解决方案二: 最简单但很笨的做法是IO模拟,但实际上STM32本身有SPI,IIC总线,故可直接使用固件函数库直接操作你的RTC寄存器

stm32单片机+vs1053音乐解码芯片

问题描述 stm32单片机+vs1053音乐解码芯片 stm32单片机+vs1053音乐解码芯片 ,可以实现同时播放两首mp3音乐文件吗 解决方案 求大神们帮帮忙 , 解决方案二: STM32芯片STM32学习笔记之芯片简介

fpga-stm32与FPGA spi通信

问题描述 stm32与FPGA spi通信 求 FPGA的vhdl 程序 和stm32液晶如何显示 fpga的vhdl代码 解决方案 STM32 spi总线通信 最近在研究SPI总线,至于协议和硬件描述就不多说了 四线包括时钟.片选.接收.发送 初始化SP ? SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; ?//全双工 ? SPI_InitStructure.SPI_Mode = S......答案就在这里:

浅谈单片机、ARM和DSP的异同

犹记得当年读书的时候,老师说单片机.ARM.DSP有互通之处,都是CPU,但听老师讲都听不懂. 我该如何理解他们,并找出他们的异同呢?我们来看看行内人的看法:   ICer,从事ARM CPU的SOC设计 按我的理解说几句吧,希望能说薄一点. 首先,说CPU,中央处理器,本质就是一个集成电路,实现的功能就是从一个地方(如rom)读出一个指令,从一个地方(如ram)读出数据,然后根据指令的不同对数据做不同的处理(如相加),然后把结果存回某个地方(如ram).不同架构的cpu会有不同的指令,不同的存

【STM32 .Net MF开发板学习-10】SPI测试之触摸屏坐标获取

STM32F103xx Cortex-M3系列的芯片含三路SPI通道,红牛开发板用了两路,SPI1连接AT45DB161B型号的SPI Flash,SPI2连接ADS7843触摸屏信号处理芯片,SPI3最好不要用,因为和JTAG的管脚有冲突,调试时会有问题.EM-STM3210E开发板由于不含触摸屏,所以只用了一路来连接SPI Flash.本篇博文介绍触摸屏坐标获取,所以只有拥有红牛开发板的用户可以测试. 先简单介绍一下SPI相关的知识,SPI是英语Serial Peripheral inter

mi200e-51单片机模拟spi控制电力载波芯片MI200E,发送0xaa,接收有显示,但不是0xaa。

问题描述 51单片机模拟spi控制电力载波芯片MI200E,发送0xaa,接收有显示,但不是0xaa. 想测试发送0xaa,但接收不对,而且接收更像是乱码,改了很多地方都不对,不知道问题出在哪里,希望各位大神帮忙看看代码错在哪.我用的keil3编译环境,51单片机,电力线载波芯片是MI200E,测试接收0xaa是通过8个led灯(也用串口显示过,和led灯显示相匹配)第一次提问题,不知道怎么把MI200E的数据手册和应用手册贴出来,在代码后贴出了文档在百度文库上的网址,麻烦各位大神了,小弟这次是

stm32 mini芯片被锁,怎样解锁

问题描述 stm32 mini芯片被锁,怎样解锁 芯片被锁,解锁提示已解锁,但仍是受保护状态.怎么下载程序也不行,而且原先的程序也不运行了. 解决方案 PTSBDy5ak9Ro9RgrC2g4g-hr7fxxAhi" rel="nofollow">http://wenku.baidu.com/link?url=Xi6tqtpEe9TLM6IHK-AHWfHc0nJL_OPbMAIpd99pgC4pvt6ncsMAEe3DOkSdXRu4Ba5DuGkaKZiCPTSBD

《STM32库开发实战指南:基于STM32F4》----1.4 安装STM32芯片包

本节书摘来自华章出版社<STM32库开发实战指南:基于STM32F4>一书中的第1章,第1.4节,作者刘火良,杨森编著,更多章节内容可以访问"华章计算机"公众号查看. 1.4 安装STM32芯片包 KEIL5不像KEIL4那样自带了很多厂商的MCU型号,而是需要自己安装.把图1-7中弹出的对话框关掉,直接去KEIL的官网http://www.keil.com/dd2/pack/ 下载,或者直接用已下载好的包. 在官网上找到STM32F1.STM32F4和STM32F7这3个

stm32-STM32f4 USB与SPI数据传输

问题描述 STM32f4 USB与SPI数据传输 STM32f407芯片的SPi接口连接芯片采集数据,通过USB接口传输到PC机,请教怎么解决?用IAR编程需要什么?有什么例子吗?求大神指教啊! 解决方案 对于你说的,你要分以下几步解决:1.调通SPI协议,成功获取芯片采集数据.在调协议时,可以参照stm32的SPI例程,配置好各个寄存器. 2.调通SPI协议之后,就是调通你的USB协议了.尤其是其传输协议.这这方面也是有很多例程的. 3.电脑上位机.即你传输数据给电脑后,通过电脑上的上位机查看