你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

笔记与问题2

[复制链接]
wrdt24435 提问时间:2018-8-8 21:36 /
Question:1、 有没有例程如何操作寄存器完成I2C发送(接收)地址、数据。
2、 有没有例程如何操作寄存器来校准时钟。
3、 据了解在稍微复杂一点的项目尽量不要使用延迟,那么请问有没有定时器cha定时查询状态判断按键按下的例程
             


一、 charconst *x 定义一个指向字符常量的指针x 。
二、 if(a)     b;c;      //b语句在if语句里,c不在。
三、 SPI通讯 : 占用3+(n)引脚(1个可不用(接地),2个以上占n个脚):
⒈   MISO:主设备输入,从设备输出
⒉   MISI:主设备输出,从设备输入
⒊   SCK:时钟(主产生)   
⒋   NSS:片选,从机被主机拉低电平后传输(从模式可用软件节省引脚,一般不用需要用时再了解)
发送模式:例如主移位寄存器是01,从是02,发送完后将互换,如果主机不需要从机数据忽略即可。
CPHA位可选4种模式,具体看56讲
主模式配置步骤:
1. 通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。
2. 选择CPOL和CPHA 位,定义数据传输和串行时钟间的相位关系。
3. 配置SPI_CR1寄存器的LSBFIRST位定义帧格式。
4. 硬件模式下,在数据帧的全部传输过程中应把NSS脚连接到高电平;在软件
模式下,需设置SPI_CR2寄存器的SSM和SSI位为‘1’。
5. 必须设置MSTR(SPI主模式)和SPE位(SPI使能位)(只当NSS脚被连到高电平,
这些位才能保持为‘1’)。在这个配置中,MOSI脚是数据输出,而MISO脚是
数据输入。

收藏 评论6 发布时间:2018-8-8 21:36

举报

6个回答
子曰好人 回答时间:2018-8-9 08:38:53
参考正点原子的寄存器开发例程
wrdt24435 回答时间:2018-8-9 09:38:09
子曰好人 发表于 2018-8-9 08:38
参考正点原子的寄存器开发例程

刚刚搜索了下,是STM32的例程,我正学习的是STM8S的
子曰好人 回答时间:2018-8-9 10:02:10
wrdt24435 发表于 2018-8-9 09:38
刚刚搜索了下,是STM32的例程,我正学习的是STM8S的

好吧,我不太了解stm8的资料,论坛或者网上搜索一下吧
sincomaster 回答时间:2018-8-17 17:48:31
本帖最后由 sincomaster 于 2018-8-17 17:56 编辑

这是我的硬件IIC,我是用寄存器操作的,可以看下,已可以点亮OLED了,
  1. /*******************************************************************************
  2. 文件名称:        I2C文件
  3. 函数功能:        I2C Driver Code
  4. 软件平台:        STVD4.3.12
  5. 编写日期:        2017.09.06
  6. 代码作者:        sinco.170
  7. 备注事项:        PE1 = SCL,PE2 = SDA(硬件I2C寄存器方式)
  8. *******************************************************************************/
  9. #include "stm8s.h"
  10. #include "iostm8s.h"
  11. #include "iic.h"

  12. //http://bbs.mydigit.cn/read.php?tid=2482933
  13. //http://bh7kqk.blog.163.com/blog/static/1274122912010102422751666/
  14. //http://www.openedv.com/thread-70958-1-1.html
  15. //http://blog.csdn.net/DevinTT/article/details/74854851
  16. /*******************************************************************************
  17. 函数名称:        void IIC_Init(void)
  18. 函数功能:        I2C初始化
  19. 输入参数:        null
  20. 输出参数:        null
  21. 编写日期:        2017.09.06
  22. 代码作者:        sinco.170
  23. *******************************************************************************/
  24. void IIC_Init(void)
  25. {       
  26.         CLK_PCKENR1 |= 0x01;                //启用I2C外设时钟
  27.        
  28.         PE_DDR                 &= 0xf9;                //PE1,PE2设置为悬浮输入
  29.         PE_CR1                 &= 0xf9;                //该位对于真正的OD口是无作用的
  30.         PE_CR2                 &= 0xf9;                       
  31.         I2C_CR1             = 0x00;                //禁用I2C模块用以配置时钟
  32.         I2C_FREQR   |= 0x10;                //时钟为16MHz
  33.         //I2C_FREQR   |= 0x01;                //时钟为1MHz
  34.         I2C_OARH          = 0x40;                //7位地址模式
  35.         I2C_OARL     = 0xa0;
  36.         I2C_CCRL    |= 0x50;                //50H<- ->80D x 62.5ns = 5000ns
  37.         I2C_CCRH    |= 0x00;                //I2C为标准模式
  38.         I2C_TRISER   = 0x11;                //配置SCL上升时间,1000ns/62.5ns = 16,16+1 = 0x11
  39.         //I2C_TRISER   = 0x02;                //时钟为1MHz时
  40.         //I2C_ITR          |= 0x00;                //禁止I2C中断
  41.         //I2C_CR2     |= 0x04;                //开启应?
  42.         I2C_CR1     |= 0x01;
  43. }

  44. /*******************************************************************************
  45. 函数名称:        void IIC_Start(u8 addres)
  46. 函数功能:        I2C start function
  47. 输入参数:        null
  48. 输出参数:        Device Address
  49. 编写日期:        2017.09.06
  50. 代码作者:        sinco.170
  51. *******************************************************************************/
  52. void IIC_Start(u8 addres)
  53. {
  54.         while(I2C_SR3 & 0x02);                //检查总线是否空闲
  55.         I2C_CR2 |= 0x01;                        //产生起始信号
  56.         while(!(I2C_SR1 & 0x01));        //等待起始信号发送完成
  57.         I2C_DR = addres;                        //发送从器件地址
  58. }

  59. /*******************************************************************************
  60. 函数名称:        void IIC_Stop(void)
  61. 函数功能:        I2C stop function
  62. 输入参数:        null
  63. 输出参数:        null
  64. 编写日期:        2017.09.06
  65. 代码作者:        sinco.170
  66. *******************************************************************************/
  67. void IIC_Stop(void)
  68. {
  69.         //while(!(I2C_SR1 & 0x04));        //等待发送结束
  70.         I2C_CR2 |= 0x02;                        //产生结束信号
  71. }

  72. /*******************************************************************************
  73. 函数名称:        void IIC_SendByte(u8 addres,u8 addr,u8 dat)
  74. 函数功能:        I2C发送一个字节
  75. 输入参数:        addres=器件地址,addr=器件写入地址,dat=数据
  76. 输出参数:        null
  77. 编写日期:        2017.09.06
  78. 代码作者:        sinco.170
  79. *******************************************************************************/
  80. void IIC_SendByte(u8 addres,u8 addr,u8 dat)
  81. {
  82.         u8 temp = 0x00;
  83.        
  84.         IIC_Start(addres);                        //
  85.         while(!(I2C_SR1 & 0x02));        //等待地址发送完成
  86.         temp = I2C_SR1;
  87.         temp + I2C_SR3;
  88.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
  89.         I2C_DR = addr;                                //发送写入地址到数据寄存器
  90.         while(!(I2C_SR1 & 0x04));        //等待数据发送完成
  91.         while(!(I2C_SR1 & 0x80));        //等待发送寄存器空
  92.         I2C_DR = dat;                                //发送数据
  93.         while(!(I2C_SR1 & 0x04));        //等待发送字节完成
  94.         temp = I2C_SR1;                                //清除标志位
  95.         temp = I2C_SR3;
  96.         IIC_Stop();
  97. }
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wrdt24435 回答时间:2018-8-22 10:35:19
sincomaster 发表于 2018-8-17 17:48
这是我的硬件IIC,我是用寄存器操作的,可以看下,已可以点亮OLED了,

谢谢大哥
robter 回答时间:2018-10-14 20:18:55
很好很好,学习学习

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版