找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 807|回复: 1
打印 上一主题 下一主题
收起左侧

stm8s105k4单片机读写寄存器操作

[复制链接]
跳转到指定楼层
楼主
求助,想实现一个如图:芯片-单片机-计算机,单片机用spi读取芯片的寄存器,然后发送到计算机,现在单片机和计算机之间的通讯已经解决了,单片机用spi读寄存器的代码一直有问题,单片机为stm8s105,附件为附带的spi例程,软件用的是iar
  1. #include "spi.h"
  2. #include "ALL_Includes.h"
  3. /*********************************************
  4. 函数功能:SPI初始化
  5. 输入参数:无
  6. 输出参数:无
  7. 备    注:无
  8. *********************************************/
  9. void SPI_Init(void)
  10. {   
  11.     SPI_IOConfig();
  12.   
  13.     SPI->CR1 |= BIT(2)|BIT(1)|BIT(0);//主设备,高位先发,2分频
  14.    
  15.     SPI->CR2 |= BIT(1)|BIT(0);//nss软件管理  
  16.     SPI->CR2 &=~(BIT(2)|BIT(7));//双线单向模式、全双工
  17.    
  18.     SPI->CR1 |= BIT(6); //使能SPI BIT(6)
  19.    
  20. }


  21. /*********************************************
  22. 函数功能:SPI读写函数
  23. 输入参数:Data:需要写入的数据
  24. 输出参数:无
  25. 备    注:无
  26. *********************************************/
  27. u8 SPI_RW(u8 Data)
  28. {

  29.    while(!(SPI->SR&0X02));//等待发送缓冲区为空
  30.    SPI->DR =Data;
  31.    
  32.    while(!(SPI->SR&0X01));//等待接收缓冲区为非空
  33.    return (SPI->DR);      
  34. }


  35. /*********************************************
  36. 函数功能:SPI IO初始化
  37. 输入参数:无
  38. 输出参数:无
  39. 备    注:无
  40. *********************************************/
  41. void SPI_IOConfig(void)
  42. {
  43.      //设置SPI_SCK为输出
  44.     SPI_SCK_GPIO->DDR  |=  SPI_SCK ;//输出模式
  45.     SPI_SCK_GPIO->CR1  |=  SPI_SCK ;//推挽输出
  46.    
  47.      //设置PC6SPI_MOSI为输出
  48.     SPI_MOSI_GPIO->DDR |=  SPI_MOSI;//输出模式
  49.     SPI_MOSI_GPIO->CR1 |=  SPI_MOSI;//推挽输出
  50.   
  51.       //设置SPI_CS为输出
  52.     SPI_CS_GPIO->DDR   |=  SPI_CS;//输出模式
  53.     SPI_CS_GPIO->CR1   |=  SPI_CS;//推挽输出
  54.    
  55.        //设置SPI_MISO为输入
  56.     SPI_MISO_GPIO->DDR &= ~SPI_MISO;//输入模式
  57.     SPI_MISO_GPIO->CR1 |=  SPI_MISO;//上拉输入

  58. }
复制代码

#include"delay.h"
/***********************
函数功能:us延时
输入参数:无
输出参数:无
备    注:粗略延时
***********************/
void delay_us(void)
{
    asm("nop"); //一个asm("nop")函数经过示波器测试代表100ns
    asm("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();
}


  1. #include "led.h"
  2. #include "ALL_Includes.h"

  3. /***********************
  4. 函数功能:初始化LED
  5. 输入参数:无
  6. 输出参数:无
  7. 备    注:无
  8. ***********************/
  9. void LED_Init(void)
  10. {
  11.       //设置IO口为输出
  12.     LEDPort->DDR |= LEDPin;//输出模式
  13.     LEDPort->CR1 |= LEDPin;//推挽输出
  14.    
  15. }

  16. /***********************
  17. 函数功能:LED开
  18. 输入参数:无
  19. 输出参数:无
  20. 备    注:无
  21. ***********************/
  22. void LED_ON(void)
  23. {
  24.     LEDPort->ODR &=~LEDPin;//LED置低
  25. }

  26. /***********************
  27. 函数功能:LED开
  28. 输入参数:无
  29. 输出参数:无
  30. 备    注:无
  31. ***********************/
  32. void LED_OFF(void)
  33. {
  34.     LEDPort->ODR |= LEDPin;//LED置高
  35. }
复制代码



SHTAC62_U5P8BP8L[{7@30C.png (63.27 KB, 下载次数: 9)

SHTAC62_U5P8BP8L[{7@30C.png

SPI.zip

411.57 KB, 下载次数: 2

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2023-9-26 20:39 | 只看该作者
没有IAR for STM8,你换个编译器吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表