野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16989|回复: 8

我用STM32的SPI驱动TM7705接收到的数据全是0?

[复制链接]
发表于 2015-3-31 11:12:04 | 显示全部楼层 |阅读模式
我发我的全部代码,还有TM7705各个引脚的波形图。
回复

使用道具 举报

 楼主| 发表于 2015-3-31 11:12:44 | 显示全部楼层
怎么上传程序包啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 11:16:08 | 显示全部楼层
我直接复制咯,代码如下:
//ÀûÓÃSTM32Ó²¼þSPI ÓëTM7705 ÊÕ·¢Êý¾Ý

//PA2:CS
//PA3:REST
//PA5:SCK
//PA6:MISO
//PA7:MOSI
//PA8RDY       


  
#include "stm32f10x.h"
#include "bsp_usart1.h"
#include "bsp_pwm_output.h"
#include "7705.h"
#include "SPI.h"

/**
  * @brief  Ö÷º¯Êý
  * @param  ÎÞ
  * @retval ÎÞ
  */
        /*********ϵͳÖжÏ*********/
void NVIC_Configuration(void)
{
        /* Configure the NVIC Preemption Priority Bits */  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  
}


int main(void)
{
         u16 b,i=1000;
    float c;
                /* USART1 config 115200 8-N-1 */
                USART1_Config();
        NVIC_Configuration();
                TIM3_PWM_Init();
         SPIx_Init();
         TM7705_Init();
        printf("\r\n this is a usart printf demo \r\n");
        while(1)
        {
                TM7705_Init();
                b = ReadTM7705();
                c = b*3.3/65535;
                printf("%f\n",c);
                                              for(; i != 0; i--);
                                         
                                        printf("\r\n this is a usart printf demo \r\n");

        }

       
}
/*********************************************END OF FILE**********************/
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 11:17:54 | 显示全部楼层
上面是Mian函数,接下来是 7705.C:
#include "7705.h"

void Delay(vu32 nCount)
{
        for(; nCount != 0; nCount--);
}
/********TM7705³õʼ»¯º¯Êý***********/
void TM7705_Init(void)
{         
        unsigned char i ;
       
         GPIO_SetBits(GPIOA,GPIO_Pin_3);  //¸´Î»¹Ø
           for(i=0;i<5;i++)
                        {
        Delay(1000);                                      //&cedil;&szlig;&micro;&ccedil;&AElig;&frac12;100
                  }       
        GPIO_ResetBits(GPIOA,GPIO_Pin_3);//&cedil;&acute;&Icirc;&raquo;&iquest;&ordf;
         Delay(1000);                          //&micro;&Iacute;&micro;&ccedil;&AElig;&frac12;20
                       
         GPIO_SetBits(GPIOA,GPIO_Pin_3);//&cedil;&acute;&Icirc;&raquo;&sup1;&Oslash;
          for(i=0;i<5;i++)
                        {
        Delay(1000);                           //&cedil;&szlig;&micro;&ccedil;&AElig;&frac12;100
                  }       
        SPIx_ReadWriteByte(0x21) ;                         //&Iacute;¨&micro;&Agrave;1 ,&Iuml;&Acirc;&Ograve;&raquo;&cedil;&ouml;&ETH;&acute;&Ecirc;±&Ouml;&Oacute;&frac14;&Auml;&acute;&aelig;&AElig;÷
        Delay(1000);
        SPIx_ReadWriteByte(0x14) ;                         //&ETH;&acute;&Ecirc;±&Ouml;&Oacute;&frac14;&Auml;&acute;&aelig;&AElig;÷&Eacute;è&Ouml;&Atilde;&cedil;ü&ETH;&Acirc;&Euml;&Ugrave;&Acirc;&Ecirc;&Icirc;&ordf;200Hz
        Delay(1000);
        SPIx_ReadWriteByte(0x11) ;                         //&Iacute;¨&micro;&Agrave;1 ,&Iuml;&Acirc;&Ograve;&raquo;&cedil;&ouml;&ETH;&acute;&Eacute;è&Ouml;&Atilde;&frac14;&Auml;&acute;&aelig;&AElig;÷
        Delay(1000);
        SPIx_ReadWriteByte(0x44) ;                         //&ETH;&acute;&Eacute;è&Ouml;&Atilde;&frac14;&Auml;&acute;&aelig;&AElig;÷ ,&Eacute;è&Ouml;&Atilde;&sup3;&Eacute;&Euml;&laquo;&frac14;&laquo;&ETH;&Ocirc;&iexcl;&cent;&Icirc;&THORN;&raquo;&ordm;&sup3;&aring;&iexcl;&cent;&Ocirc;&ouml;&Ograve;&aelig;&Icirc;&ordf;0&iexcl;&cent;&Acirc;&Euml;&sup2;¨&AElig;÷&sup1;¤×÷&iexcl;&cent;×&Ocirc;&ETH;&pound;×&frac14;
        Delay(1000000);               
}


/********&para;&Aacute;16&Icirc;&raquo;&Ecirc;&yacute;&frac34;&Yacute;************/
u16 ReadTM7705_16BitValue(void)
{
        unsigned long DataL = 0;
        unsigned long DataH = 0;
        unsigned long Ret = 0;

        DataH = SPIx_ReadWriteByte(0xFF);
    DataH = DataH << 8;
    DataL = SPIx_ReadWriteByte(0xFF);
        Ret          = DataH | DataL;

        return(Ret) ;   

}

u16 ReadTM7705(void)
{
   
  unsigned long Ret = 0;
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);//&AElig;&not;&Ntilde;&iexcl;&iquest;&ordf;
        SPIx_ReadWriteByte(0x39) ;       //&Eacute;è&Ouml;&Atilde;&para;&Aacute;&micro;±&Ccedil;°&Iacute;¨&micro;&Agrave;&Ecirc;&yacute;&frac34;&Yacute;
        while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8 == 1))
        {
                ;
        }
    Ret = ReadTM7705_16BitValue();
                GPIO_SetBits(GPIOA,GPIO_Pin_2);//        &AElig;&not;&Ntilde;&iexcl;&sup1;&Oslash;       
         
    return Ret;
                               
                         
                               
}

7705.h:
#ifndef __7705_H
#define        __7705_H

#include "stm32f10x.h"
#include <stdio.h>

void TM7705_Init(void);
u8 SPIx_ReadWriteByte(u8 TxData);
void SPIx_Init(void);
u16 ReadTM7705(void);

#endif /* __7705_H */
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 11:19:04 | 显示全部楼层
接下来是SPI.c:

#include "SPI.h"

/********&para;&Aacute;&Egrave;&iexcl;AD7705&micro;&Uacute;&Ograve;&raquo;&Iacute;¨&micro;&Agrave;&Ecirc;&yacute;&frac34;&Yacute;************/

/****************************SPI&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;*************************/                              
//SPI&iquest;&Uacute;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
//&Otilde;&acirc;&Agrave;&iuml;&Otilde;&euml;&Ecirc;&Ccedil;&para;&Ocirc;SPI1&micro;&Auml;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
void SPIx_Init(void)
        {         
        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
                                       
                                RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1|RCC_APB2Periph_AFIO, ENABLE );
                                       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;// AdDrdy
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;//PC8&Eacute;&Iuml;&Agrave;&shy;&Ecirc;&auml;&Egrave;&euml;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);               
                               
        /* Configure SPI1 pins: SCK, MISO and MOSI */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //&cedil;&acute;&Oacute;&Atilde;&Iacute;&AElig;&Iacute;ì&Ecirc;&auml;&sup3;&ouml;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
                                       
        
        /* Configure I/O for Flash Chip select */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;  //SPI CS SPI REST
       GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;  //&Iacute;&AElig;&Iacute;ì&Ecirc;&auml;&sup3;&ouml;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        
        /* Deselect the FLASH: Chip Select high */
        GPIO_SetBits(GPIOA,GPIO_Pin_2);
                                         GPIO_SetBits(GPIOA,GPIO_Pin_3);

        /* SPI1 configuration */
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //&Eacute;è&Ouml;&Atilde;SPI&micro;&yen;&Iuml;ò&raquo;ò&Otilde;&szlig;&Euml;&laquo;&Iuml;ò&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute;&Auml;&pound;&Ecirc;&frac12;:SPI&Eacute;è&Ouml;&Atilde;&Icirc;&ordf;&Euml;&laquo;&Iuml;&szlig;&Euml;&laquo;&Iuml;ò&Egrave;&laquo;&Euml;&laquo;&sup1;¤
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //&Eacute;è&Ouml;&Atilde;SPI&sup1;¤×÷&Auml;&pound;&Ecirc;&frac12;:&Eacute;è&Ouml;&Atilde;&Icirc;&ordf;&Ouml;÷SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //&Eacute;è&Ouml;&Atilde;SPI&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute;&acute;ó&ETH;&iexcl;:SPI·&cent;&Euml;&Iacute;&frac12;&Oacute;&Ecirc;&Otilde;8&Icirc;&raquo;&Ouml;&iexcl;&frac12;á&sup1;&sup1;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //&Ntilde;&iexcl;&Ocirc;&ntilde;&Aacute;&Euml;&acute;&reg;&ETH;&ETH;&Ecirc;±&Ouml;&Oacute;&micro;&Auml;&Icirc;&Egrave;&Igrave;&not;:&Ecirc;±&Ouml;&Oacute;&ETH;ü&iquest;&Otilde;&cedil;&szlig;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //&Ecirc;&yacute;&frac34;&Yacute;&sup2;&para;&raquo;&ntilde;&Oacute;&Uacute;&micro;&Uacute;&para;&thorn;&cedil;&ouml;&Ecirc;±&Ouml;&Oacute;&Ntilde;&Oslash;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS&ETH;&Aring;&ordm;&Aring;&Oacute;&Eacute;&Oacute;&sup2;&frac14;&thorn;&pound;¨NSS&sup1;&Uuml;&frac12;&Aring;&pound;&copy;&raquo;&sup1;&Ecirc;&Ccedil;&Egrave;í&frac14;&thorn;&pound;¨&Ecirc;&sup1;&Oacute;&Atilde;SSI&Icirc;&raquo;&pound;&copy;&sup1;&Uuml;&Agrave;í:&Auml;&Uacute;&sup2;&iquest;NSS&ETH;&Aring;&ordm;&Aring;&Oacute;&ETH;SSI&Icirc;&raquo;&iquest;&Oslash;&Ouml;&AElig;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;                //&para;¨&Ograve;&aring;&sup2;¨&Igrave;&Oslash;&Acirc;&Ecirc;&Ocirc;¤·&Ouml;&AElig;&micro;&micro;&Auml;&Ouml;&micro;:&sup2;¨&Igrave;&Oslash;&Acirc;&Ecirc;&Ocirc;¤·&Ouml;&AElig;&micro;&Ouml;&micro;&Icirc;&ordf;256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //&Ouml;&cedil;&para;¨&Ecirc;&yacute;&frac34;&Yacute;&acute;&laquo;&Ecirc;&auml;&acute;&Oacute;MSB&Icirc;&raquo;&raquo;&sup1;&Ecirc;&Ccedil;LSB&Icirc;&raquo;&iquest;&ordf;&Ecirc;&frac14;:&Ecirc;&yacute;&frac34;&Yacute;&acute;&laquo;&Ecirc;&auml;&acute;&Oacute;MSB&Icirc;&raquo;&iquest;&ordf;&Ecirc;&frac14;
        SPI_InitStructure.SPI_CRCPolynomial = 7;            //CRC&Ouml;&micro;&frac14;&AElig;&Euml;&atilde;&micro;&Auml;&para;à&Iuml;&icirc;&Ecirc;&frac12;
        SPI_Init(SPI1, &SPI_InitStructure);             //&cedil;ù&frac34;&Yacute;SPI_InitStruct&Ouml;&ETH;&Ouml;&cedil;&para;¨&micro;&Auml;&sup2;&Icirc;&Ecirc;&yacute;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&Iacute;&acirc;&Eacute;èSPIx&frac14;&Auml;&acute;&aelig;&AElig;÷
        
        //SPI1->CR1|=1<<6; //SPI&Eacute;è±&cedil;&Ecirc;&sup1;&Auml;&Uuml;
        /* Enable SPI1  */
        SPI_Cmd(SPI1, ENABLE); //&Ecirc;&sup1;&Auml;&Uuml;SPI&Iacute;&acirc;&Eacute;è
        
        SPIx_ReadWriteByte(0xff);//&AElig;&ocirc;&para;&macr;&acute;&laquo;&Ecirc;&auml;   
                               
}  
         

//SPIx &para;&Aacute;&ETH;&acute;&Ograve;&raquo;&cedil;&ouml;×&Ouml;&frac12;&Uacute;
//TxData:&Ograve;&ordf;&ETH;&acute;&Egrave;&euml;&micro;&Auml;×&Ouml;&frac12;&Uacute;
//·&micro;&raquo;&Oslash;&Ouml;&micro;:&para;&Aacute;&Egrave;&iexcl;&micro;&frac12;&micro;&Auml;×&Ouml;&frac12;&Uacute;
u8 SPIx_ReadWriteByte(u8 TxData)
{   
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);//&AElig;&not;&Ntilde;&iexcl;&iquest;&ordf;       
        Delay(1000);
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); //&frac14;ì&sup2;é&Ouml;&cedil;&para;¨&micro;&Auml;SPI±ê&Ouml;&frac34;&Icirc;&raquo;&Eacute;è&Ouml;&Atilde;&Oacute;&euml;·&ntilde;:·&cent;&Euml;&Iacute;&raquo;&ordm;&acute;&aelig;&iquest;&Otilde;±ê&Ouml;&frac34;&Icirc;&raquo;
        SPI_I2S_SendData(SPI1, TxData); //&Iacute;¨&sup1;&yacute;&Iacute;&acirc;&Eacute;èSPIx·&cent;&Euml;&Iacute;&Ograve;&raquo;&cedil;&ouml;&Ecirc;&yacute;&frac34;&Yacute;
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); //&frac14;ì&sup2;é&Ouml;&cedil;&para;¨&micro;&Auml;SPI±ê&Ouml;&frac34;&Icirc;&raquo;&Eacute;è&Ouml;&Atilde;&Oacute;&euml;·&ntilde;:&frac12;&Oacute;&Ecirc;&Uuml;&raquo;&ordm;&acute;&aelig;·&Ccedil;&iquest;&Otilde;±ê&Ouml;&frac34;
        GPIO_SetBits(GPIOA,GPIO_Pin_2);//        &AElig;&not;&Ntilde;&iexcl;&sup1;&Oslash;       
        return SPI_I2S_ReceiveData(SPI1); //·&micro;&raquo;&Oslash;&Iacute;¨&sup1;&yacute;SPIx×&icirc;&frac12;ü&frac12;&Oacute;&Ecirc;&Otilde;&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute;   
}
接下来是SPI.h:
#ifndef __SPI_H
#define        __SPI_H

#include "stm32f10x.h"
#include <stdio.h>

u8 SPIx_ReadWriteByte(u8 TxData);
void SPIx_Init(void);
void Delay(vu32 nCount);


#endif /* __SPI_H */
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 11:20:00 | 显示全部楼层
接下来是串口:
#include "bsp_usart1.h"

/**
  * @brief  USART1 GPIO &Aring;&auml;&Ouml;&Atilde;,&sup1;¤×÷&Auml;&pound;&Ecirc;&frac12;&Aring;&auml;&Ouml;&Atilde;&iexcl;&pound;115200 8-N-1
  * @param  &Icirc;&THORN;
  * @retval &Icirc;&THORN;
  */
void USART1_Config(void)
{
                GPIO_InitTypeDef GPIO_InitStructure;
                USART_InitTypeDef USART_InitStructure;
               
                /* config USART1 clock */
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
               
                /* USART1 GPIO config */
                /* Configure USART1 Tx (PA.09) as alternate function push-pull */
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
       
                /* Configure USART1 Rx (PA.10) as input floating */
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
       

                       
                /* USART1 mode config */
                USART_InitStructure.USART_BaudRate = 115200;
                USART_InitStructure.USART_WordLength = USART_WordLength_8b;
                USART_InitStructure.USART_StopBits = USART_StopBits_1;
                USART_InitStructure.USART_Parity = USART_Parity_No ;
                USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
                USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
                USART_Init(USART1, &USART_InitStructure);
                USART_Cmd(USART1, ENABLE);
}

///&Ouml;&Oslash;&para;¨&Iuml;òc&iquest;&acirc;&ordm;&macr;&Ecirc;&yacute;printf&micro;&frac12;USART1
int fputc(int ch, FILE *f)
{
                /* ·&cent;&Euml;&Iacute;&Ograve;&raquo;&cedil;&ouml;×&Ouml;&frac12;&Uacute;&Ecirc;&yacute;&frac34;&Yacute;&micro;&frac12;USART1 */
                USART_SendData(USART1, (uint8_t) ch);
               
                /* &micro;&Egrave;&acute;&yacute;·&cent;&Euml;&Iacute;&Iacute;ê±&Iuml; */
                while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);               
       
                return (ch);
}

///&Ouml;&Oslash;&para;¨&Iuml;òc&iquest;&acirc;&ordm;&macr;&Ecirc;&yacute;scanf&micro;&frac12;USART1
int fgetc(FILE *f)
{
                /* &micro;&Egrave;&acute;&yacute;&acute;&reg;&iquest;&Uacute;1&Ecirc;&auml;&Egrave;&euml;&Ecirc;&yacute;&frac34;&Yacute; */
                while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

                return (int)USART_ReceiveData(USART1);
}
/********??????,???????***********/  

void RCC_Configuration(void)  

{  

        SystemInit();         

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA   

                |RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO   

                |RCC_APB2Periph_SPI1, ENABLE );  

}

/*********************************************END OF FILE**********************/


#ifndef __USART1_H
#define        __USART1_H

#include "stm32f10x.h"
#include <stdio.h>

void USART1_Config(void);
void RCC_Configuration(void)  ;
//int fputc(int ch, FILE *f);
//void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...);

#endif /* __USART1_H */
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-31 11:20:43 | 显示全部楼层
接下来是输出的1M时钟给7705:

  
#include "bsp_pwm_output.h"

/**
  * @brief  &Aring;&auml;&Ouml;&Atilde;TIM3&cedil;&acute;&Oacute;&Atilde;&Ecirc;&auml;&sup3;&oumlWM&Ecirc;±&Oacute;&Atilde;&micro;&frac12;&micro;&Auml;I/O
  * @param  &Icirc;&THORN;
  * @retval &Icirc;&THORN;
  */
static void TIM3_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

        /* &Eacute;è&Ouml;&Atilde;TIM3CLK &Icirc;&ordf; 72MHZ */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // &cedil;&acute;&Oacute;&Atilde;&Iacute;&AElig;&Iacute;ì&Ecirc;&auml;&sup3;&ouml;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


  /*GPIOB Configuration: TIM3 channel 3 and 4 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/**
  * @brief  &Aring;&auml;&Ouml;&Atilde;TIM3&Ecirc;&auml;&sup3;&ouml;&micro;&AumlWM&ETH;&Aring;&ordm;&Aring;&micro;&Auml;&Auml;&pound;&Ecirc;&frac12;&pound;&not;&Egrave;&ccedil;&Ouml;&Uuml;&AElig;&Uacute;&iexcl;&cent;&frac14;&laquo;&ETH;&Ocirc;&iexcl;&cent;&Otilde;&frac14;&iquest;&Otilde;±&Egrave;
  * @param  &Icirc;&THORN;
  * @retval &Icirc;&THORN;
  */
/*
* TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> TIMxCNT &Ouml;&Oslash;&ETH;&Acirc;&frac14;&AElig;&Ecirc;&yacute;
*                    TIMx_CCR(&micro;&ccedil;&AElig;&frac12;·&cent;&Eacute;ú±&auml;&raquo;&macr;)
* &ETH;&Aring;&ordm;&Aring;&Ouml;&Uuml;&AElig;&Uacute;=(TIMx_ARR +1 ) * &Ecirc;±&Ouml;&Oacute;&Ouml;&Uuml;&AElig;&Uacute;
* &Otilde;&frac14;&iquest;&Otilde;±&Egrave;=TIMx_CCR/(TIMx_ARR +1)
*/
static void TIM3_Mode_Config(void)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;

        /* PWM&ETH;&Aring;&ordm;&Aring;&micro;&ccedil;&AElig;&frac12;&Igrave;&oslash;±&auml;&Ouml;&micro; */

        u16 CCR4_Val = 36;

/* -----------------------------------------------------------------------
    TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR+1)* 100% = 50%
    TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR+1)* 100% = 37.5%
    TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR+1)* 100% = 25%
    TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR+1)* 100% = 12.5%
  ----------------------------------------------------------------------- */

  /* Time base configuration */                 
  TIM_TimeBaseStructure.TIM_Period = 71;       //&micro;±&para;¨&Ecirc;±&AElig;÷&acute;&Oacute;0&frac14;&AElig;&Ecirc;&yacute;&micro;&frac12;999&pound;&not;&frac14;&acute;&Icirc;&ordf;1000&acute;&Icirc;&pound;&not;&Icirc;&ordf;&Ograve;&raquo;&cedil;&ouml;&para;¨&Ecirc;±&Ouml;&Uuml;&AElig;&Uacute;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;            //&Eacute;è&Ouml;&Atilde;&Ocirc;¤·&Ouml;&AElig;&micro;&pound;&ordm;&sup2;&raquo;&Ocirc;¤·&Ouml;&AElig;&micro;&pound;&not;&frac14;&acute;&Icirc;&ordf;72MHz
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        //&Eacute;è&Ouml;&Atilde;&Ecirc;±&Ouml;&Oacute;·&Ouml;&AElig;&micro;&Iuml;&micro;&Ecirc;&yacute;&pound;&ordm;&sup2;&raquo;·&Ouml;&AElig;&micro;(&Otilde;&acirc;&Agrave;&iuml;&Oacute;&Atilde;&sup2;&raquo;&micro;&frac12;)
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //&Iuml;ò&Eacute;&Iuml;&frac14;&AElig;&Ecirc;&yacute;&Auml;&pound;&Ecirc;&frac12;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            //&Aring;&auml;&Ouml;&Atilde;&Icirc;&ordfWM&Auml;&pound;&Ecirc;&frac12;1
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //&micro;±&para;¨&Ecirc;±&AElig;÷&frac14;&AElig;&Ecirc;&yacute;&Ouml;&micro;&ETH;&iexcl;&Oacute;&Uacute;CCR1_Val&Ecirc;±&Icirc;&ordf;&cedil;&szlig;&micro;&ccedil;&AElig;&frac12;


  /* PWM1 Mode configuration: Channel4 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;        //&Eacute;è&Ouml;&Atilde;&Iacute;¨&micro;&Agrave;4&micro;&Auml;&micro;&ccedil;&AElig;&frac12;&Igrave;&oslash;±&auml;&Ouml;&micro;&pound;&not;&Ecirc;&auml;&sup3;&ouml;&Aacute;í&Iacute;&acirc;&Ograve;&raquo;&cedil;&ouml;&Otilde;&frac14;&iquest;&Otilde;±&Egrave;&micro;&AumlWM
  TIM_OC4Init(TIM3, &TIM_OCInitStructure);        //&Ecirc;&sup1;&Auml;&Uuml;&Iacute;¨&micro;&Agrave;4
  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM3, ENABLE);                         // &Ecirc;&sup1;&Auml;&Uuml;TIM3&Ouml;&Oslash;&Ocirc;&Oslash;&frac14;&Auml;&acute;&aelig;&AElig;÷ARR

  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);                   //&Ecirc;&sup1;&Auml;&Uuml;&para;¨&Ecirc;±&AElig;÷3       
}

/**
  * @brief  TIM3 &Ecirc;&auml;&sup3;&oumlWM&ETH;&Aring;&ordm;&Aring;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&pound;&not;&Ouml;&raquo;&Ograve;&ordf;&micro;÷&Oacute;&Atilde;&Otilde;&acirc;&cedil;&ouml;&ordm;&macr;&Ecirc;&yacute;
  *         TIM3&micro;&Auml;&Euml;&Auml;&cedil;&ouml;&Iacute;¨&micro;&Agrave;&frac34;&Iacute;&raquo;á&Oacute;&ETHWM&ETH;&Aring;&ordm;&Aring;&Ecirc;&auml;&sup3;&ouml;
  * @param  &Icirc;&THORN;
  * @retval &Icirc;&THORN;
  */
void TIM3_PWM_Init(void)
{
        TIM3_GPIO_Config();
        TIM3_Mode_Config();       
}

/*********************************************END OF FILE**********************/

#ifndef __PWM_OUTPUT_H
#define        __PWM_OUTPUT_H

#include "stm32f10x.h"

void TIM3_PWM_Init(void);

#endif /* __PWM_OUTPUT_H */

回复 支持 反对

使用道具 举报

发表于 2015-3-31 11:21:33 | 显示全部楼层
楼主,遇到这种情况一般都只能是自己帮自己,TM7705我们也没用过

具体的问题还得靠自己

单步一步步调试吧
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2015-3-31 11:25:37 | 显示全部楼层
本帖最后由 熊文涛 于 2015-3-31 11:26 编辑

我测了SCLK IN的波形确实稳定的1M,然后数据波形SCK也是很稳定的,然后我想看看数据传输时 SCK与CS的波形是不是和芯片资料上的一样,结果,SCK的波形确实是,起伏也是3V左右,但是CS几乎没啥变化一样,有点干扰,看不出是高电平还是低电平,问题可能是出在时序上,可我怎么想都想不明白,代码改了又改,哎不知道错在哪,我的通道1接的是电阻0,通道2接了大概100欧姆,两个通道轮流测全是0.
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 01:47 , Processed in 0.041833 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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