【STM8】使用SPI通讯控制多个级联MBI5043 一一外设(SPI和TIM4)使用

外设的使用

概要:本项目用到了SPI通信和TIM4定时器。这一章将介绍如何使用C语言来调用相应外设,
调用外设分为两部分,一是初始化,二是使用外设。
初始化分为三步

外设时钟初始化-------外设时钟门控寄存器(CLK_PCKENR)---上一章时钟初始化有介绍
外设对应引脚初始化---------GPIO的寄存器 ---上一章引脚初始化有介绍
外设寄存器初始化------------外设的寄存器

使用外设,常使用的寄存器

控制寄存器(CR)
状态寄存器(SR)
数据寄存器(DR)
、、、

TIM4 实现 精准延时

查阅STM8S的参考手册,定时器最常见的使用方法是中断。如下图
在这里插入图片描述
本文将 “中断产生” 改成 “原地等待计数器溢出,再执行下一步” ,所以TIM4具体使用情景时

有更新事件
无中断
一次等待越久越好。所以分频系数改最大,自动重装载值(ARR)也可以改最大,设为125,一次延时正好是1ms. 
delay_once = ARR*T = ARR*(1/f_cnt) = ARR*(2^PSC[2:0]/f_master)

初始化 TIM4_init()

根据上文TIM4使用情景,以下代码就容易理解了
代码如下:

void TIM4_init(void)
{
	TIM4_PSCR=0x07;  //2^PSC[2:0] = 2^7
	TIM4_EGR=0x01;	//无触发事件,有更新事件
	TIM4_IER=0x00;   //无触发中断和更新中断
	TIM4_ARR=125;	//ARR=125
	TIM4_CNTR=0x00; //CLEAR COUNTER
}

延时函数 delay()

YES
NO
START TIM4
计数器溢出
溢出位清零
STOP TIM4
计数器清零
void delay(u16 ms)
{
	TIM4_CNTR=0x00; //CLEAR COUNTER
	TIM4_CR1|=0x01; //start tim4
	while(ms--)
	{
		while(!(TIM4_SR1&0x01));
		TIM4_SR1&=~0x01; //clear overwhelmed bit
	}
	
	TIM4_CR1&=~0x01; //stop tim4
}

SPI外设 实现 高速通信

SPI通信 本项目使用的具体情况是,

STM8为主设备
单线(MOSI一根线)单向(master out),只发送不接收
只有一个从设备----->禁止软件从设备管理
不接收,无需中断

初始化 spi_init()

数据手册内有单线双向,只发送的情况下SPI的配置介绍
在这里插入图片描述

void spi_init(void)
{
	SPI_CR1 = 0x04;		//f_baud(主模式频率)=f_master/2
	//MSB、8MHz、主设备、CPOL空闲为低、CPHA第一个时钟开始
	SPI_CR2 = 0xc0;		//
	//单线双向、只发送模式、CRC计算禁止、禁止软件NSS
	SPI_CR1 |= 0x40;	//START SPI
	
}

SPI通信函数

  • 查阅STM8数据手册,SPI通信的注意事项,截图如下
    在这里插入图片描述
    关闭SPI前要判断
  • 因此本项目的SPI通信流程图
1
0
1
0
START SPI
SPI_SR的TXE标志
spi_send
SPI_SR的BSY标志
STOP SPI
  • 代码如下
	SPI_CR1 |= 0x40;	//START SPI
	
	for(j=0;j<n_MBI5043_1_stm8-1;j++)
	{
		spi_send(dis_buf[ic_map[i*3 + j]]);
	}
	
	while(SPI_SR&0x80);		// must know spi is not busy,otherwise it is sitll running, stop cmd won't work
	SPI_CR1 &= ~(0x40);	//STOP SPI
void spi_send(u16 data)
{
	while(!(SPI_SR&0x02));
	SPI_DR = (u8)(data>>8);
	while(!(SPI_SR&0x02));
	SPI_DR = (u8)(data);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值