stm8s 开发SPI的两种方法

发布者:科技思想家最新更新时间:2020-02-18 来源: eefocus关键字:stm8s  开发SPI  两种方法 手机看文章 扫描二维码
随时随地手机看文章

1: void GPIO_Configuration(void)


Add  GPIOA configuration


void GPIO_Configuration(void)


{   


  GPIO_DeInit(GPIOD);


  /* Configure PD0 (LED1) as output push-pull low (led switched on) */


  GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);


  /* GPIOD reset */


  GPIO_DeInit(GPIOC);


  /* Configure PD0 (LED1) as output push-pull low (led switched on) */


  GPIO_Init(GPIOC, GPIO_PIN_5 , GPIO_MODE_OUT_PP_HIGH_SLOW);


  GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_SLOW);


  GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);}


2: void HC595SendData(u8 SendData)


  send data to HC595 Using GPIOA+SPI


  GPIOC.6---- SER


  GPIOC.5---- SCLK


  GPIOC.4---- RCLK


void HC595SendData(u8 SendData)



#if Comm_MODE


  while (SPI_GetFlagStatus( SPI_FLAG_TXE) == RESET);


  SPI_SendData(SendData);


  while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);


  SPI_ReceiveData(); /*读取因上面发送数据产生的无效数据*/


#else


  // 寄存器(可赋值):不优化290KHz,最高速度优化:319KHz


   u8 i;   


   for(i=0; i<8; i++)


   {


        if(SendData<ODR |= GPIO_PIN_6; //SER


        else                   GPIOC->ODR &=~GPIO_PIN_6;


  

        GPIOC->ODR |= GPIO_PIN_5; //SCLK


        GPIOC->ODR &=~GPIO_PIN_5;  


    }


   #endif


}


3: void sdata(void)


   Send 8 byte data to HC595


void sdata(void)


 {


    HC595SendData(segbit[m]);


    HC595SendData(fseg[disbuf[m]]);


    GPIOC->ODR |= GPIO_PIN_4; //RCLK


    GPIOC->ODR &=~GPIO_PIN_4;


    m++;


    if(m==8)


    {


      m=0;


    }


 }


**


1.declare m as globe variable


unsigned char m;


#define Comm_MODE        1/0


2.declare segbit , fseg and disbuf variable


  U8  fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};


unsigned char  segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};


unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};


3.should include the head file


   #include "stm8s_spi.h"

关键字:stm8s  开发SPI  两种方法 引用地址:stm8s 开发SPI的两种方法

上一篇:【STM8】SPI通讯
下一篇:stm8 硬件SPI

推荐阅读最新更新时间:2024-11-05 10:35

stm8s swim 脚的复用
由于 临时改跳线的原因,需要用到swim脚来做为按钮输入。 因为,swim是编程脚,还担心会有影响。 于是,看了手册,发现swim是附加功能。主要功能 还是PD1 作为GPIO脚用的。 于是 就直接 当 GPIO脚用。然后 烧写程序一切正常。 重复烧程序也都正常。 因此,说明 swim 做为GPIO脚用是 完全 没有问题的。也不影响 烧写程序。 用的芯片型号是:STM8S003F3P6
[单片机]
万用表检查电路短路的两种方法
用万用表检查电路短路——电压检测法 ① 拆下烧坏的熔丝并断开所有通过熔丝电源的负载(即SW1 断开,继电器及电磁阀断开)。 ② 将点火开关转至ON 或START 位置。确认在熔丝端口蓄电池正极侧为蓄电池电压(一个探针放在熔丝盒蓄电池正极端口侧,另一个探针放在已知良好的接地处)。 ③ 断开SW1,将万用表探针跨接在熔丝的两个端口上测量电压。 有电压,短路在熔丝盒和SW1 之间(点A); 无电压,短路在SW1 之后更远处。 ④ 闭合SW1,断开继电器和电磁阀,将万用表探针跨接在熔丝端口两侧测量电压。 有电压,短路在SW1 和继电器之间(点B); 无电压,短路在继电器之后更远处。 ⑤ 闭合SW1,用带熔丝的跳线跨接闭合继电器测量电压
[测试测量]
万用表检查电路短路的<font color='red'>两种</font><font color='red'>方法</font>
STM8S的中断系统
STM8具有最多32的中断系统,另外,外部中断中有一个特殊的中断叫做TLI不可屏蔽中断,也就是PD7,他不属于D中断向量而是拥有自己的TLI中断向量。 A,B,C,D,E,这些端口同时只能一个用来作为中断输入,比如PA0,PB0,PC0,PE0等等同时只能有一个作为中断输入。 使用外部中断的过程 1.配置中断向量 2.配置中断端口的触发模式
[单片机]
简单介绍下关于STM8S的几种低功耗模式
STM8S105的低功耗模式总的来说有四种:分别是等待模式,停机模式,快速活跃停机模式和慢速活跃停机模式 1、等待模式:可执行指令wif()进入等待模式,该模式下主CPU停止工作,但其外设不停,严格来说只能算是降低功耗而不能算低功耗,该模式可由AMU或外部中断唤醒 2、停机模式:可执行指令half()进入停机模式,该模式下主cpu和外设全部停止,达到最低功耗,只能由外部中断进行唤醒。 3、快速活跃停机模式:在执行指令half()之前,如果你使能了AMU功能,则进入快速活跃停机模式,该模式下由于主电压调节器打开,在受到AMU或外部中断触发时,可快速唤醒。 4、慢速活跃停机模式:在快速活跃停机模式下,如果设置内部时钟寄
[单片机]
简单介绍下关于<font color='red'>STM8S</font>的几种低功耗模式
STM8S_002_TIM精确延时(阻塞式)
Ⅰ、写在前面 在某些特定场合,需要精确的延时(us级),特别是底层驱动。如果使用软件延时,延时会随系统时钟改变及各种因素影响而改变。因此,就需要使用TIM精确延时。 阻塞式延时:从延时开始至结束,程序一直阻塞在那里,不会跳转到其他地方(除中断)执行程序。不理解的朋友可以自己网上搜索答案。 TIM的种类和功能很多,本文是基础的知识,讲的比较简单,关于定时器更加强大和实用的功能可以关注我后面的文章。 为方便大家阅读,本文内容已经整理成PDF文件: http://pan.baidu.com/s/1i5uWhJR 作者:strongerHuang 版权所有,未经允许,禁止用于其它商业用途!!! Ⅱ、TIM基础知识 S
[单片机]
STM8S_002_TIM精确延时(阻塞式)
stm8s跳出中断程序c语言,STVD自动生成的stm8
整理一下,不知理解对不对; /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices * Copyright (c) 2007 STMicroelectronics */ //typedef void (*)void,;定义一个类型(指向函数的指针)取得void类型函数的函数入口地址指针 typedef void @far (*interrupt_handler_t)(void); //定义一个结构体类型存放{中断指令,中断处理程序名(即中断函数入口指针)} struct interrupt_vector { unsigned char interrupt_instruction
[单片机]
stm8s eeprom读写
stm8s有自带的eeprom,起始地址是0x4000,终止到哪看手册,因为我用的时候只写一个4字节数据,配置如下: 入参:eeprom偏移地址,写入的数据 void eeprom_write(const unsigned char addr,unsigned long date) { asm( sim ); FLASH_CR1_FIX = 1;//编程时间固定为标准编程时间 FLASH_CR2_WPRG = 1;//使能字编程 FLASH_NCR2_NWPRG = 0;/使能字编程 do { FLASH_DUKR = 0xAE; FLASH_DUKR = 0x56; } wh
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved