外设的使用

概要:本项目用到了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^7TIM4_EGR=0x01;   //无触发事件,有更新事件TIM4_IER=0x00;   //无触发中断和更新中断TIM4_ARR=125;    //ARR=125TIM4_CNTR=0x00; //CLEAR COUNTER
}

延时函数 delay()

YES
NO
START TIM4
计数器溢出
溢出位清零
STOP TIM4
计数器清零
void delay(u16 ms)
{TIM4_CNTR=0x00; //CLEAR COUNTERTIM4_CR1|=0x01; //start tim4while(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计算禁止、禁止软件NSSSPI_CR1 |= 0x40; //START SPI}

SPI通信函数

  • 查阅STM8数据手册,SPI通信的注意事项,截图如下

  • 因此本项目的SPI通信流程图
1
0
1
0
START SPI
SPI_SR的TXE标志
spi_send
SPI_SR的BSY标志
STOP SPI
  • 代码如下
 SPI_CR1 |= 0x40;   //START SPIfor(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 workSPI_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);
}

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

  1. 【STM8】使用SPI通讯控制多个级联MBI5043 一一方案制定

    第一步 阅读原理图 重点看什么呢? 先上图 图1 图2 重点看: 芯片具体型号(因为后面要查阅相应的参考手册) *STM8S103F3 和 MBI5043* 管脚连线方式 *STM8S103F3 通过 ...

  2. 【STM8】使用SPI通讯控制多个级联MBI5043 一一代码实现

    整体架构 摘要: 本章内容包含了时钟初始化,引脚初始化,逻辑函数的实现.逻辑函数的重点内容是 资料锁存函数中的注意事项,映射函数的含义.全部项目代码在文章末尾 #include "STM8S ...

  3. SPI通讯协议详解 基于STM32

    SPI 协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线.它被广泛地使用在 ADC.L ...

  4. Arduino使用u8g2库函数驱动4线/6线OLED屏幕(I2C/SPI通讯)附带库函数详解

    话不多说,直接入正题: 常见的OLED通常有两种样式,如下图所示,分别是4线和6线控制 本人几乎浏览了网上所有关于控制OLED模块的教程,并都经过了项目实测:大力推荐u8g2这个库函数来控制,文章末尾 ...

  5. 串口RS232 RS485最本质的区别!-!I2C通讯协议 最简单的总线通讯!-深入理解SPi通讯协议!

    5分钟看懂!串口RS232 RS485最本质的区别!-4分钟看懂!I2C通讯协议 最简单的总线通讯!-深入理解SPi通讯协议,5分钟看懂! 一.5分钟看懂!串口RS232 RS485最本质的区别! 二 ...

  6. 华邦存储器W25Q80, W25Q16, W25Q32系列的spi通讯

    华邦存储器W25Q80, W25Q16, W25Q32系列与stm32f1系列单片机的spi通讯 2020.4.9 spi通讯在配置好之后一定要开启spi使能,和串口的配置是一样的 2020.4.13 ...

  7. 加密芯片SPI通讯的调试

    SPI是串行外设接口(Serial Peripheral Interface)的缩写.是Motorola公司推出的一种同步串行接口技术,是一种高速的.全双工,同步的通信总线. SPI的通信原理很简单, ...

  8. 详细介绍GPIO、I2C、SPI通讯原理以及物理层原理

    目录 一. GPIO 1. 什么是GPIO? 2. GPIO组成原理 3. GPIO工作原理 二. I2C 1. 什么是I2C? 2. I2C组成原理 3. I2C的特性 4. I2C的通讯模式 5. ...

  9. 基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 IC-MU磁绝对值编码器的SPI通讯和码盘数据处理 前言 一.硬件连接 二.STM32 cubmx配置模式 三.软件代码及思路 1.寄 ...

最新文章

  1. 基于ThinkPHP的在线编辑器调用
  2. 软键盘挡住输入框问题的终极解决方案
  3. Android之记住密码与自动登陆实现
  4. Everything Toolbar – 用 Everything 替换 Win 10 任务栏系统搜索框
  5. Java Math.round()函数小结
  6. oracle 执行sql路径,如何指定 SQL 执行路径
  7. hdoj 3400 三分
  8. Linq to xml:检索
  9. 拓端tecdat|Python风险价值计算投资组合VaR(Value at Risk )、期望损失ES(Expected Shortfall)
  10. android app反解工具,安卓反编译逆向工具:Apktool + dex2jar 教程
  11. linux 取字符串的一部分,什么linux shell命令返回字符串的一部分?
  12. BZOJ 3162 独钓寒江雪
  13. 上计算机课睡觉检讨书400,课堂上睡觉检讨书范文
  14. meta是什么意思中文_Meta 的意思是什么?
  15. 高考计算机会考等级划分标准,学考等级怎么划分2020最新标准
  16. Redis 列表(List)方法使用详解
  17. React中文文档之Lifting State Up
  18. 2020YKB西医综合全程班资料
  19. 各行各业利润大曝光!电脑、服装、房子、奶茶等等利润大曝光,快进来瞧瞧吧~
  20. ueditor编辑器抓取页面背景图片background-image或background

热门文章

  1. html把图片设为5边形,用div+css轻松绘制正3、4、5、6、7、8边形
  2. vb.net按式样比较字符串
  3. 我的淘宝 快乐岛主外挂的制作经历
  4. 论文阅读方法(整理自公众号)
  5. 紧跟数字经济发展脉络 加快推动制造业转型升级
  6. [Pipy]利用pip2pi搭建本地pypi源
  7. 编译原理(3)算符优先语法分析程序设计(Python实现)
  8. java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离
  9. 他普通本科程序员,五年存100万买房!居然靠这个
  10. 【源码】利用惠更斯-菲涅耳原理模拟一维光场传播