网上关于stm8s1003 驱动si4432的 驱动不是很多 ,我也是弄了大半天才可以和si4432 spi驱动成功。 接下来要做无线收发和组网。

暂时先贴 spi驱动的

spi模拟方式:

main.c

#include "stm8s.h"
#include "mytype.h"
#include"delay.h"
#include "USART.h"//定义CPU内部时钟
#define  SYS_CLOCK    16#define  SPIPort  GPIOC
#define  nMOSI  6
#define  nMISO  7
#define  nSCLK  5
#define  nCS    4
#define  MISO_G   gbi(SPIPort->IDR,nMISO)
#define  MOSI_H   sbi(SPIPort->ODR,nMOSI)
#define  MOSI_L   cbi(SPIPort->ODR,nMOSI)
#define  SCLK_H   sbi(SPIPort->ODR,nSCLK)
#define  SCLK_L   cbi(SPIPort->ODR,nSCLK)
#define  CS_H     sbi(SPIPort->ODR,nCS)
#define  CS_L     cbi(SPIPort->ODR,nCS)void CLOCK_Config(u8 SYS_CLK);/*************************************************************************** 函数名:SPI_Init* 描述  :SPI模块发送函数* 输入  :无* 返回  :无*************************************************************************/
void  SPI_Init(void)
{cbi(SPIPort->DDR,nMISO);//MISO INPUTsbi(SPIPort->CR1,nMISO);sbi(SPIPort->DDR,nMOSI);//MOSI OUTPUTsbi(SPIPort->CR1,nMOSI);sbi(SPIPort->DDR,nSCLK);//SCLK OUTPUTsbi(SPIPort->CR1,nSCLK);sbi(SPIPort->DDR,nCS);//CS OUTPUTsbi(SPIPort->CR1,nCS);
}/*************************************************************************** 函数名:SPI_SendByte* 描述  :SPI模块发送函数* 输入  :发送数据* 返回  :返回数据*************************************************************************/
u8 SPI_SendByte(u8 byte)
{     u8 i = 0;u8 bit_r = 0;  for(i=0;i<8;i++)  // output 8-bit{    //MOSI_PIN=byte & 0x80;        //output 'byte' MSB to MOSI_PINif(byte & 0x80)MOSI_H;elseMOSI_L;byte <<= 1;                // shift next bit into MSB..SCLK_H;bit_r<<=1;if(MISO_G) bit_r++;SCLK_L;//SCK_PIN=1 ;              // Set SCK_PIN high..//byte|=MISO_PIN;         // capture current MISO_PIN bit//SCK_PIN=0;                // then set SCK_PIN low again}return(bit_r);                        // return read byte
}/*************************************************************************** 函数名:SPI_ReadRegister* 描述  :SPI读取寄存器数值* 输入  :寄存器地址* 返回  :数据*************************************************************************/
u8 SPI_ReadRegister (u8 addr)
{u8 Result;CS_L;    //nSEL = 0;  SPI_SendByte(addr);        //write data into the SPI registerResult = SPI_SendByte(0xFF);CS_H;    //nSEL = 1;return(Result);
}/*************************************************************************** 函数名:SPI_WriteRegister* 描述  :SPI写寄存器数值* 输入  :寄存器地址,数值* 返回  :无*************************************************************************/
void SPI_WriteRegister (u8 addr, u8 value)
{CS_L;                  //nSEL = 1;                             SPI_SendByte(addr|0x80);            //write data into the SPI register SPI_SendByte(value);CS_H;                  //nSEL = 1;}/*************************************************************************** 函数名:main* 描述  :主函数* 输入  :无* 返回  :无*************************************************************************/
int main(void)
{     u8 temp = 0;CLOCK_Config(SYS_CLOCK);//系统时钟初始化  UART_Init(SYS_CLOCK,9600);SPI_Init();while(1){   temp =  SPI_ReadRegister(0x00);delay_ms(100);UART_SendChar(temp);temp =  SPI_ReadRegister(0x09);delay_ms(100);UART_SendChar(temp);}}/*************************************************************************** 函数名:CLOCK_Config* 描述  :系统内部时钟配置 SYS_CLK : 2、4、8、16  系统启动默认内部2MHZ* 输入  :无* 返回  :无*************************************************************************/
void CLOCK_Config(u8 SYS_CLK)
{//时钟配置为内部RC,16MCLK->CKDIVR &=~(BIT(4)|BIT(3));switch(SYS_CLK){case 2: CLK->CKDIVR |=((1<<4)|(1<<3)); break;case 4: CLK->CKDIVR |=(1<<4); break;case 8: CLK->CKDIVR |=(1<<3); break;}
}

#include "mytype.h"

#ifndef __MyType_H
#define __MyType_H#ifndef BIT
#define BIT(x)  (1 << (x))
#endif/* io configs */
#ifndef sbi
#define sbi(io,bit)     ( io  |=  (1<<bit) )
//example:sbi(GPIOA->ODR,0);sbi(GPIOA->DDR,0);
#endif #ifndef cbi
#define cbi(io,bit)     ( io  &= ~(1<<bit) )
//example:cbi(GPIOA->ODR,0);cbi(GPIOA->DDR,0);
#endif #ifndef xor
#define xor(port, bit)          (port) ^= (1 << (bit))
#endif#ifndef gbi
#define gbi(pin ,bit)   ( pin &   (1<<bit) )
//example: gbi(GPIOA->IDR,0);
#endif #endif

#include"delay.h"

#include"delay.h"/***********************
函数功能:us延时
输入参数:无
输出参数:无
备    注:粗略延时
***********************/
void delay_us(void)
{ asm("nop"); //一个asm("nop")函数经过示波器测试代表100nsasm("nop");asm("nop");asm("nop");
}/***********************
函数功能:ms延时
输入参数:无
输出参数:无
备    注:粗略延时
***********************/
void delay_ms(unsigned int time)
{unsigned int i;while(time--)  for(i=900;i>0;i--)delay_us();
}

#include "USART.h"

#include "USART.h"
#include "ALL_Includes.h"/**************************
函数功能:初始化UART
输入参数:SYS_Clk:系统时钟(2,4,8,16)baud:   波特率
输出参数:无
备    注:无
***************************/
void UART_Init(u8 SYS_Clk, u32 baud)
{   u16 UART_Temp;UART_IOConfig();//UART IO引脚初始化 UART1->CR2 = 0;// 禁止UART发送和接收UART1->CR1 = 0;// b5 = 0,允许UART  b2 = 0,禁止校验UART1->CR3 = 0;// b5,b4 = 00,1个停止位/************************************************** 设置波特率,必须注意以下几点:(1) 必须先写BRR2(2) BRR1存放的是分频系数的第11位到第4位,(3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位例如对于波特率位9600时,分频系数=2000000/9600=208对应的十六进制数为00D0,BBR1=0D,BBR2=00
*************************************************/ UART_Temp = SYS_Clk*1000000/baud;UART1->BRR2 = (u8)((UART_Temp&0x000F)|((UART_Temp&0xF000)>>8));UART1->BRR1 = (u8)((UART_Temp&0x0FF0)>>4);UART1->CR2 = 0x2C; // b3 = 1,允许发送// b2 = 1,允许接收// b5 = 1,允许产生接收中断
}/**************************************
函数功能:从UART3发送一个字符
输入参数:ch -- 要发送的字符
输出参数:无
备    注:无
***************************************/
void UART_SendChar(unsigned char ch)
{while((UART1->SR & 0x80) == 0x00);  // 若发送寄存器不空,则等待UART1->DR = ch;                     // 将要发送的字符送到数据寄存器
}/***********************************
函数功能:UART IO口初始化
输入参数:无
输出参数:无
备   注:IO在输出模式下,可通过CR2寄存器控制输出速率
***********************************/
void UART_IOConfig(void)
{ TXPort->DDR |= TXPin;//输出模式TXPort->CR1 |= TXPin;//推挽输出   RXPort->DDR &=~RXPin;//输入模式RXPort->CR1 &=~RXPin;//浮空输入
}
#ifndef  _USART_H
#define  _USART_H#include "ALL_Includes.h"//定义UART的TX、RX引脚
#define  TXPort  GPIOD
#define  TXPin   (1 << 5)
#define  RXPort  GPIOD
#define  RXPin   (1 << 6)void UART_Init(u8 SYS_Clk, u32 baud);
void UART_SendChar(unsigned char ch);
void UART_IOConfig(void);#endif

STM8S1003 模拟SPI 驱动 SI4432相关推荐

  1. MSP430杂谈--AD7793硬件SPI驱动与模拟SPI驱动

    最近项目中用到了AD7793读取铂电阻值来得到相应的温度,编写了基于MSP430的硬件驱动程序和模拟驱动程序,并且能成功运行,现在记录一下分享给大家. AD7793硬件IIC驱动完整版下载链接:htt ...

  2. 鸿蒙开发板Hi3861模拟SPI驱动JLX12864_LCD(UC1701X)_基于code-2.0

    鸿蒙开发板驱动晶联讯LCDjlx12864_lcd_hi3861源码-C文档类资源-CSDN下载鸿蒙开发板驱动晶联讯LCDjlx12864_lcd_hi3861源码博文介绍https://t更多下载资 ...

  3. 【全志T113-S3_100ask】15-2 linux系统gpio模拟spi驱动屏幕——ILI9341

    [全志T113-S3_100ask]15-2 linux系统gpio模拟spi驱动屏幕--ILI9341 背景 (一)查阅参考文档 (二)使能内核模块 (三)修改设备树 (四)测试 (五)后语 背景 ...

  4. 鸿蒙开发板Hi3861模拟SPI驱动12864LCD_ST7920_基于code-2.0-CANARY

    鸿蒙开发板Hi3861模拟SPI驱动12864LCD_ST7920源码.rar-C文档类资源-CSDN下载鸿蒙开发板Hi3861模拟SPI驱动12864LCD_ST7920源码.rar博文链接:htt ...

  5. 外设驱动库开发笔记43:GPIO模拟SPI驱动

      SPI总线是我们常用的串行设备接口,一般情况下我们都会适应硬件SPI接口,但有些时候当硬件端口不足时,我们也希望可以使用软件来模拟SPI硬件接口,特别是要求不是很高的时候.在这一篇中我们将来讨论如 ...

  6. MAX535 单路13位DAC 模拟SPI驱动

    一.MAX535 max535是低功耗.13位.电压输出DAC,采用串行接口和µMAX封装.MAX535通过单个+5V/3.3V电源工作,仅需要280µA电流工作. MAX535/MAX5351适用于 ...

  7. TLV5618 双路12位DAC 模拟SPI驱动

    一.TLV65618芯片 TLV5618A 带掉电功能 2.7V-5.5V,低功耗双路 12 位数模转换器 特点 ●双路 12 位电压输出 DAC ●可编程调节转换时间 - 快速模式 3μs - 低速 ...

  8. 模拟SPI驱动SD卡

    使用新唐的SDIO例子修改为SDH1始终驱动不了SD卡,所以使用模拟的方式驱动SD卡 头文件: #ifndef __SD_H #define __SD_H#include "NuMicro. ...

  9. 模拟SPI驱动W25Q16程序 (DSP 28X系列)

    为了驱动SPI FLASH而写的驱动程序,写的时候主要是板子的自带SPI接口被占用,只好使用IO口模拟一个SPI接口程序: w25q16 芯片工作在SPI工作模式0和模式3中:在此spi的原理不多做说 ...

最新文章

  1. AMD桌面处理器Roadmap也已泄露
  2. windows下批量换程序——运维常用
  3. WebSocket API 学习笔记
  4. PhpSpreadsheet如何读取excel文件
  5. L1-021 重要的话说三遍 (5 分) — 团体程序设计天梯赛
  6. 不同VLAN间的通信
  7. XSS跨站脚本攻击和预防措施
  8. win7安装python3.7失败_win7安装python3.7出现setup failed,成功解决
  9. iOS之Apple ID双重认证与两步验证的区别
  10. 江西省赣州市谷歌高清卫星地图下载
  11. 原神 Android 教程 —安卓版
  12. CRM系统慢慢转为企业微信SCRM
  13. 日常生活中常用的五星级句子
  14. Spring Boot配置文件---约定大于配置
  15. 唇语识别!AI 领域的下一个万亿市场?
  16. FPS游戏外挂屡禁不止,如何破局?
  17. Windows 11 系统下载,正式版尚未发布
  18. 菜鸡做题·20200418会员登陆页面(CTF)
  19. 我的2021年度书单(主要教你面试怎么装B)
  20. c语言单目运算符和三目,6、单目运算符 双目运算符 三目运算符() 及 优先级的探讨!...

热门文章

  1. 【mysql】mysql查询优化之索引类型、最左前缀
  2. 北京大学优秀计算机论文,计算机系在ESEC/FSE'20上发表的论文获得ACM SIGSOFT杰出论文奖...
  3. 来看一位淘宝卖家是如何精确的运作微信营销的
  4. Taro 小程序开发大型实战(三):实现微信和支付宝多端登录
  5. 360校招笔试题总结3
  6. 在状态栏StatusBar中添加网速实时显示
  7. 新书推荐:iOS Swift 游戏开发指南
  8. 多道批处理操作系统和分时操作系统的概念
  9. 批处理系统脱机使用计算机,1.2.2 脱机输入/输出和批处理系统
  10. 微信小程序(uniapp)获取用户位置信息及选择位置