OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7862|回复: 6

用STM8SF103 SPI 单线双向数据模式 读写 TM1642。出现奇怪的错误,很奇怪。不来看看的后悔死

[复制链接]

163

主题

1223

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2014-5-21
在线时间
339 小时
发表于 2014-6-7 09:37:29 | 显示全部楼层 |阅读模式
5金钱

这错误很奇怪,点击 go to definition“SPI_Cmd”能跳转到定义的地方

最佳答案

查看完整内容[请看2#楼]

回复【6楼】正点原子: --------------------------------- 谢谢原子哥回复,已经解决问题现在遇到ADC中断进不去的问题了
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

163

主题

1223

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2014-5-21
在线时间
339 小时
 楼主| 发表于 2014-6-7 09:37:30 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
谢谢原子哥回复,已经解决问题现在遇到ADC中断进不去的问题了
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

163

主题

1223

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2014-5-21
在线时间
339 小时
 楼主| 发表于 2014-6-7 09:38:38 | 显示全部楼层

我是这样配置SPI的
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

163

主题

1223

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2014-5-21
在线时间
339 小时
 楼主| 发表于 2014-6-7 09:39:18 | 显示全部楼层

TM1642.C


#include "tm1642.h"
//#include <math.h>
#include "stm8s.h"
#include "stm8s_type.h"
#include "stm8s_spi.h"
#include "stm8s_clk.h"
#include "stm8s_gpio.h"
#include <iostm8s103f3.h>
 
u8 seg_code_cc[10] =
{
 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f
};
/*0   1    2    3    4     5    6   7     8    9       O    E    F    n    r  */

//u8 rdBuffer[5] = {0};
u8 wrBuffer[12] = { 0,0,0,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0};
/********************************************************   
Function: segBufCha() 把需要显示的数转换为LED显示码
*********************************************************/
void segBufCha (u16 Idat)
 {
 u8 i,j;
 u16 temp = Idat;
        if ( Idat < 10 )
    j = 1;
 else if ( Idat < 100 )
    j = 2;
 else
    j = 3;
 // j = 1 + (int)log10(dat);
 
 for ( i = 3; i < 11; i++ )
    {
   wrBuffer = 0;
  }    
 for ( i = 0; i < j; i++ )
  {
   if (seg_code_cc[ temp % 10+3 ]<0x40)
      wrBuffer [ i * 2+3 ] = seg_code_cc[ temp % 10 ];
   else
       wrBuffer [ i * 2+3 ] = seg_code_cc[ temp % 10 ]-0x40;
              wrBuffer [ i * 2 + 4 ] = 0x01;
              temp = temp / 10;
  }
 }


/******************************************************  
Function: displayLED() read key-cmd of TM1642
*******************************************************/

void displayLED (void)
     {
 wrBuffer[0] = BIT7_SEG10;
 wrBuffer[1] = DAT_WR | ADD_INC;
 wrBuffer[2] = 0xC0;
 wrBuffer[11] = CUR_14_16|DIS_ON;
 wrBufferData ( wrBuffer, 12 );
      }

 
/**********************************************************************/
void wrBufferData (u8 *idata,u8 len)
     {
 u8 i;
 SPICS = LOW;
        nop();
        nop();
 for ( i = 0; i < len; i++ )
       {
  SPI_SendData(wrBuffer);
  }
        SPICS = HIGH;
      }
/**************************************************************  
Function: tm1642Init()  initialize TM1642
***************************************************************/
void tm1642Init (void)
 {
 SPICS   = HIGH;
 SPICLK  = HIGH;
 SPIOUT  = HIGH;
 }
/**********************************************************************/
/**********************************************************************/
void Delay(u16 nCount)
{
  while (nCount != 0)
  {
    nCount--;
  }
}
/**********************************************************************/
void SPI_SendData(unsigned char DataToSend){
    while(!SPI_SR_TXE);
    SPI_DR = DataToSend;


void GPIO_Config(void)
{
    
  GPIO_DeInit(GPIOC);
  GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)GPIO_PIN_5|GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_SLOW);
  
  GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);
}
/**********************************************************************/
void CLK_Config(void)
{
   
  CLK_DeInit();
  
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);
}
/**********************************************************************/
void SPI_Config(void)
{
  /* Enable SPI clock */
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
    /* SD_SPI Configuration */
  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_256, SPI_MODE_MASTER,SPI_CLOCKPOLARITY_HIGH,
           SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_RXONLY, SPI_NSS_SOFT, 0x07);
  /* SPI enable */
  SPI_Cmd( ENABLE);
}


/****************************************************************************  
Function: wrBufferData() write data&cmd to TM1642
*****************************************************************************/
 
/*
void wrBufferData (u8 *dat,u8 len)
     {
 u8 i, j, temp;

 SPICS = LOW;
        nop();
        nop();
 for ( i = 0; i < len; i++ )
       {
  temp = dat;
  
  for ( j=0; j<8; j++)
        {
   SPICLK = LOW;
   nop();
                        nop();                    
   //SPIOUT = bool(temp & 1) ;
                        if((temp & 0x01)==0x01)
                              SPIOUT = HIGH; 
                        else  SPIOUT = LOW;
                              temp>>=1;
         SPICLK = HIGH;
   nop();                    
         }
  }
        SPICS = LOW;
 //if ( KEY_RD != dat[0] ) SPICS = HIGH;
      }*******/


 



彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

163

主题

1223

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2014-5-21
在线时间
339 小时
 楼主| 发表于 2014-6-7 09:40:01 | 显示全部楼层
TM1642.H


/*-----------------$ TM1642_H $----------------*/

#define __TM1642_H__
#include "stm8s_type.h"
#include <iostm8s103f3.h>

#define SPICS PC_ODR_ODR5 
#define SPICLK PC_ODR_ODR6
#define SPIOUT PC_ODR_ODR7
#define SPIIN PC_IDR_IDR7

/* 命令模式 */
//#define COM_MASK 0xc0
#define DIS_CMD ((0x00) << 6) /*显示模式设置命令*/
#define WRT_CMD ((0x01) << 6) /*数据读写设置命令*/
#define DIS_CTRL ((0x02) << 6) /*显示控制命令*/
#define  ADD_SET ((0x03) << 6) /*地址设置命令*/

//显示模式设置   默认是BIT7_SEG11
//#define  DIS_MODE 0x03
#define  BIT4_SEG14 0x00 
#define  BIT5_SEG13 0x01
#define BIT6_SEG12 0x02
#define BIT7_SEG10 0x03

//数据读写设置指令--设置数据的写和读,B1和B0位不允许设置01和11
//#define  DAT_READ_MASK 0x4f
#define DAT_WR 0x40 //写数据到显示寄存器
#define KEY_RD 0x42 //读键扫数据
#define ADD_INC 0x40    //地址自动增加
#define ADD_ABS 0x44    //固定地址
#define  NORMAL 0x40 //普通模式
#define TEST 0x48 //测试模式

//地址设置指令  在低位地址的基础上 或上 0XC0;  0x00h-0x0dh
//    0x00 | 0xC0

//显示控制命令   设置灰度和显示开关
#define  CUR_1_16 0x80//0x88
#define  CUR_2_16 0x81//0x89
#define CUR_4_16 0x82//0x8A
#define CUR_10_16 0x83//0x8B
#define CUR_11_16 0x84//0x8C
#define CUR_12_16 0x85//0x8D
#define CUR_13_16 0x86//0x8E
#define CUR_14_16 0x87//0x8F

#define DIS_OFF 0x80
#define DIS_ON 0x88//0x8C

#define  KS9 0x01
#define KS10 0x08

#define      SW1 KS10
#define  SW2 KS9

#if !defined(HIGH) || (HIGH!=(1))
#define HIGH (1)
#endif

#if !defined(LOW) || (LOW!=(0))
#define LOW (0)
#endif
extern u8 wrBuffer[12];
extern u8 rdBuffer[5];
extern u8 seg_code_cc[10];
extern void wrBufferData ( u8 *dat, u8 len );
extern void  rdBufferData ( void); 
extern void  tm1642Init ( void );
/*
extern void displayLED(void);
extern void segBufCha ( u16 Idat );
extern void Delay (u16 nCount);
extern void GPIO_Config(void);
extern void CLK_Config(void);
extern void SPI_Config(void);
extern void SendData(unsigned char data);*/
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

163

主题

1223

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1461
金钱
1461
注册时间
2014-5-21
在线时间
339 小时
 楼主| 发表于 2014-6-7 09:40:38 | 显示全部楼层
main函数


#include <iostm8s103f3.h>
#include "stm8s.h" 

#include "TM1642.h"
int main()
{
   CLK_Config();
  GPIO_Config();
   SPI_Config();

    tm1642Init ( );

while (1)
        { 
          segBufCha( 888 );
          displayLED ();
           nop();
        nop(); nop();
        nop(); nop();
        nop(); nop();
        
          //Delay(200);
}
}
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-6-7 23:51:49 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 19:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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