OpenEdv-开源电子网

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

求大神帮忙解释一段代码,利用F103通过485及TM512AC芯片控制数码管

[复制链接]

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2020-8-16
在线时间
37 小时
发表于 2022-4-15 17:39:44 | 显示全部楼层 |阅读模式
1金钱
#include "stm32f10x.h"
#include "gpio.h"
//#define  ADDR_BASE   0x08007c00                  //′æ′¢êy¾YFlashò3ê×μØÖ·
#include <math.h>
#include "uart.h"
#include "XT9822.h"


#include "stdlib.h"
/**********************************************************/
#define  Tm512_data_num 4
extern u32 XT9822Dat[nXT9822];
void RCC_Configuration(void);
void Delay_ms(uint32_t time);
void Delay_us(uint32_t Times);
void NVIC_Configuration(void);
void TIM1_Configuration(void);
void IWDG_Configuration(void);
void W_Tm512_addr(u16 start_addr,u16 num);
void DataL_to_DataH(u8 *data,u8 *data_buff,u16 len);
void DataL_to_DataH_1(u8 *data,u16 len);
u8 Motor_get_info[8]={0x55,0xaa,0x03,0x01,0x04,0x00,0x22,0x2a};
//u16  GetPara(u32 addr);
//void SavePara(u32 addr,u16 data);
u8 data_buff_1[500]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                      0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71/*0,0x50,0x00,0x00,0x00,
                             0x00,0x50,0x00,0x00,
                             0x00,0x00,0x50,0x00,
                             0x00,0x00,0x00,0x50,
                             0x50,0x00,0x00,0x00,
                             0x00,0x50,0x00,0x00,*/
                          };
u8 data_buff_2[500]={0,0x00,0x00,0x00,0x00,
                             0x00,0x00,0x00,0x00,};
u8 data_buff_3[500]={0,0x00,0x00,0x50,
                             0x50,0x00,0x00,};
u8 data_buff_4[500]={0,0x00,0x00,0x00,0x50,
                             0x50,0x00,0x00,0x00,};
//u8 addr_data_1[50]={0x00,0xaa,0xf0,0x34,0x55,0xac,0x80,0x80,0x40,
//                         0xaa,0xf0,0x34,0x55,0xac,0x80,0x80,0x43,
//                         0xaa,0xf0,0x34,0x55,0xac,0x80,0x80,0x46,
//                               0xaa,0xf0,0x34,0x55,0xac,0x80,0x80,0x49,
//                         0xaa,0xf0,0x34,0x55,0xac,0x80,0x80,0x4c,       
//                               0xaa,0xf0,0x34,0x55,0xac,0x80,0x80,0x4f
//                    };
u8 addr_data_1[4800]={0};
//u8 addr_data_2[50]={0x00,0xaa,0xf0,0x34,0x55,0xac,0xc0,0x80,0x40,
//                         0xaa,0xf0,0x34,0x55,0xac,0xc0,0x80,0x43,
//                         0xaa,0xf0,0x34,0x55,0xac,0xc0,0x80,0x46,
//                               0xaa,0xf0,0x34,0x55,0xac,0xc0,0x80,0x49,
//                               0xaa,0xf0,0x34,0x55,0xac,0xc0,0x80,0x4c,
//                               0xaa,0xf0,0x34,0x55,0xac,0xc0,0x80,0x4f,
//                         };        
//u8 addr_data_buff[50];
/**********************************************************/
int main(void)
{
    u16 i,j,n;

    RCC_Configuration();                       
          GPIO_Configuration();
          NVIC_Configuration();        
         
          Delay_ms(10);
                 USART1_Config();
    TX1_EN;
    Delay_ms(2000);
//    W_Tm512_addr(0,6);//DT&#184;&#196;μ&#216;&#214;·
    Delay_ms(1000);
          uart1_send_buff(data_buff_2,25);
                Delay_ms(500);
                   uart1_send_buff(data_buff_1,8);
                 Delay_ms(100);
        while(1)         
         {
           uart1_send_buff(data_buff_1,25);
                 Delay_ms(100);
//                 uart1_send_buff(data_buff_2,109);
//                 Delay_ms(100);
//                 uart1_send_buff(data_buff_3,109);
//                 Delay_ms(500);
//                          uart1_send_buff(data_buff_4,109);
//                 Delay_ms(500);
//                          for(n=0;n<3;n++)
//                 {
//                 for(i=0;i<160;i++)
//                 {
//                        for(j=0;j<481;j++)
//                         {
//                         data_buff_4[j]=0;                         
//                         }
//                         data_buff_4[i*3+1+n]=30;
//                 {
//                  uart1_send_buff(data_buff_4,481);
//                 Delay_ms(100);
//                 }
//           }
//         }
         }                  
}
void W_Tm512_addr(u16 start_addr,u16 num)
{
u16 i,j;
        if(start_addr+num*Tm512_data_num<0xfff)
  {               
        addr_data_1[0]=0;
  for(i=0;i<num;i++)
   {
                addr_data_1[i*8+1]=0xaa;
                addr_data_1[i*8+2]=0xf0;
                addr_data_1[i*8+3]=0x34;
                addr_data_1[i*8+4]=0x55;
                addr_data_1[i*8+5]=0xac;
                addr_data_1[i*8+6]=0x80;
                addr_data_1[i*8+7]=0x80|(((start_addr+i*Tm512_data_num)&0x0FC0)>>6);
                addr_data_1[i*8+8]=0x40|((start_addr+i*Tm512_data_num)&0x3f);
         }
         DataL_to_DataH_1(addr_data_1,num*8+1);
         GPIO_Tx_Config(1);
   uart1_send_buff1(addr_data_1,num*8+1);
         addr_data_1[0]=0;
  for(i=0;i<num;i++)
   {
                addr_data_1[i*8+1]=0xaa;
                addr_data_1[i*8+2]=0xf0;
                addr_data_1[i*8+3]=0x34;
                addr_data_1[i*8+4]=0x55;
                addr_data_1[i*8+5]=0xac;
                addr_data_1[i*8+6]=0xc0;
                addr_data_1[i*8+7]=0x80|(((start_addr+i*Tm512_data_num)&0x0FC0)>>6);
                addr_data_1[i*8+8]=0x40|((start_addr+i*Tm512_data_num)&0x3f);
       
         }
         DataL_to_DataH_1(addr_data_1,num*8+1);
         GPIO_Tx_Config(1);
   uart1_send_buff1(addr_data_1,num*8+1);
  }

}
void DataL_to_DataH_1(u8 *data,u16 len)
{
  u16 i,j;
        u8  temp;
  for(i=0;i<len;i++)
          {
               
                *data=((*data>>7)&0x01)|((*data>>5)&0x02)|((*data>>3)&0x04)|((*data>>1)&0x08)|
                                 ((*data<<7)&0x80)|((*data<<5)&0x40)|((*data<<3)&0x20)|((*data<<1)&0x10);
                data++;
                }


}
void DataL_to_DataH(u8 *data,u8 *data_buff,u16 len)
{
  u16 i,j;
        u8  temp;
  for(i=0;i<len;i++)
          {
               
                *data_buff=((*data>>7)&0x01)|((*data>>5)&0x02)|((*data>>3)&0x04)|((*data>>1)&0x08)|
                                 ((*data<<7)&0x80)|((*data<<5)&0x40)|((*data<<3)&0x20)|((*data<<1)&0x10);
                data_buff++;
                data++;
                }


}

void TIM2_IRQHandler(void)
{
        u8 i;
  u8 music_data_temp;
     if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
        {
           
        }
          TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
         }

void TIM3_IRQHandler(void)
{

     if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
             {                           

             }
          TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
         }
void TIM4_IRQHandler(void)
{

     if(TIM_GetITStatus(TIM4, TIM_IT_Update) == SET)
            {                           


             }
          TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
         }


void Motor_test(void)
{

}       

void IO_test(void)
{

}       


void send_data(u8 Txdata)
{
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET){}
                USART_SendData(USART3,Txdata );

}
void send_test_data(u8 rxdata,u16 run_count )
{

}
/*****************************************************************************************************
** oˉêy&#195;&#251;3&#198;: SavePara()
** oˉêy&#195;èê&#246;: ±£′&#230;2&#206;êy
** &#189;ó&#191;ú2&#206;êy: addr,data
------------------------------------------------------------------------------------------------------
** ±&#184;×¢:&#195;&#191;′&#206;D′êy&#190;Y&#199;°μ&#195;&#207;è2á3y&#203;ùòa′&#230;′¢&#206;&#187;&#214;&#195;&#203;ù&#212;úμ&#196;&#213;&#251;&#184;&#246;ò3£&#172;&#213;aê&#199;oíEEPROMμ&#196;2&#187;í&#172;&#214;&#174;′|&#161;£Flash2&#187;&#190;&#223;±&#184;DT&#184;&#196;1|&#196;ü£&#172;
        &#214;&#187;&#196;ü&#207;è2á3y&#212;ùD′£&#172;&#182;&#248;2á3yê±£&#172;&#214;&#187;&#214;§3&#214;ò32á3y&#161;£
                addrμ&#216;&#214;··&#182;&#206;§£oADDR_BASE ~ADDR_BASE+1022
*****************************************************************************************************/
//void SavePara(u32 addr,u16 data)
//{
//  FLASH_Unlock();                               //&#195;&#191;′&#206;2á3yFlash&#214;Dêy&#190;Yê±μ&#195;&#207;è&#189;a&#203;&#248;
//  FLASH_ErasePage(ADDR_BASE);      //2á3yò3
//  FLASH_ProgramHalfWord(addr,data);//D′16&#206;&#187;°&#235;×&#214;
//  FLASH_Lock();                                       //é&#207;&#203;&#248;
//
//}
/*****************************************************************************************************
** oˉêy&#195;&#251;3&#198;: GetPara()
** oˉêy&#195;èê&#246;: &#182;á3&#246;2&#206;êy
** &#189;ó&#191;ú2&#206;êy: addr &#182;áè&#161;êy&#190;Y&#203;ù&#212;úμ&#196;Flashμ&#216;&#214;·
------------------------------------------------------------------------------------------------------
** ±&#184;×¢: addrμ&#216;&#214;··&#182;&#206;§£oADDR_BASE ~ADDR_BASE+1022
*****************************************************************************************************/
//u16 GetPara(u32 addr)
//{
//   u16 data;
//   data=(u16)(*(u32*)addr); //&#182;áè&#161;&#207;àó|μ&#216;&#214;·&#214;Dμ&#196;16&#206;&#187;êy&#190;Y
//   return data;
//}
void IWDG_Configuration(void)           //&#191;′&#195;&#197;1·3&#245;ê&#188;&#187;ˉ
{
        IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
        IWDG_SetPrescaler(IWDG_Prescaler_256);
        IWDG_SetReload(0xfff);
        IWDG_ReloadCounter();
        IWDG_Enable();
}
void Delay_us(uint32_t Times)
{
   uint32_t i=0;     
                while(Times--)   
                        {        
                                i=8;  //   
                                while(i--);      
                        }
}
void Delay_ms(uint32_t time)
        {         
                uint32_t i=0;     
                while(time--)   
                        {        
                                i=10000;  //   
                                while(i--);      
                        }
        }


void TIM2_Configuration(void)          //TIM23&#245;ê&#188;&#187;ˉ  5ms
{
       
//        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//                //&#212;¤·&#214;&#198;μ&#207;μêy&#206;a36000-1£&#172;&#213;a&#209;ù&#188;&#198;êy&#198;÷ê±&#214;ó&#206;a72MHz/7200=10kHz
//        TIM_TimeBaseStructure.TIM_Prescaler=72-1;
//        TIM_TimeBaseStructure.TIM_Period = 5000;
//        TIM_TimeBaseStructure.TIM_ClockDivision=0;//éè&#214;&#195;ê±&#214;ó·&#214;&#184;&#238;TIM_CKD_DIV1=0x0000,2&#187;·&#214;&#184;&#238;
//        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //éè&#214;&#195;&#188;&#198;êy&#198;÷&#196;£ê&#189;&#206;a&#207;òé&#207;&#188;&#198;êy&#196;£ê&#189;
//        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
//        TIM_ClearFlag(TIM2, TIM_FLAG_Update);
//  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
//        TIM_Cmd(TIM2,DISABLE);//TIM2
//        TIM_Cmd(TIM2,ENABLE);//TIM2
        //*****************************         
}



/*******************************************************************************
* oˉêy&#195;&#251;                  : NVIC_Configuration
* oˉêy&#195;èê&#246;            : éè&#214;&#195;NVIC2&#206;êy
* ê&#228;è&#235;2&#206;êy      : &#206;T
* ê&#228;3&#246;&#189;á1&#251;      : &#206;T
* ·μ&#187;&#216;&#214;μ        : &#206;T
*******************************************************************************/
void NVIC_Configuration(void)
{                                                               
        /* &#182;¨ò&#229; NVIC 3&#245;ê&#188;&#187;ˉ&#189;á11ì&#229; */
        NVIC_InitTypeDef NVIC_InitStructure;
       
                /* #ifdef...#else...#endif&#189;á11μ&#196;×÷ó&#195;ê&#199;&#184;ù&#190;Y&#212;¤±àò&#235;ì&#245;&#188;t&#190;&#246;&#182;¨&#214;D&#182;&#207;&#207;òá&#191;±í&#198;eê&#188;μ&#216;&#214;·*/   
#ifdef  VECT_TAB_RAM  
                  /* &#214;D&#182;&#207;&#207;òá&#191;±í&#198;eê&#188;μ&#216;&#214;·′ó 0x20000000 &#191;aê&#188; */
                NVIC_SetVectorTable(NVIC_VectTab_RAM , 0x0);
#else         /* VECT_TAB_FLASH */
                  /* &#214;D&#182;&#207;&#207;òá&#191;±í&#198;eê&#188;μ&#216;&#214;·′ó 0x80000000 &#191;aê&#188; */
                  NVIC_SetVectorTable(NVIC_VectTab_FLASH , 0x0);   
#endif
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//
        NVIC_Init(&NVIC_InitStructure);
//        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//        NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);

//        NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);
//       
//        NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=8;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);
//  
//          NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=10;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);
//  
//  NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel2_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=4;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);
//       
//        NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel4_IRQn;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=4;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);
       
//        NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQn;//&#209;&#161;&#212;&#241;USART3&#214;D&#182;&#207;
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//
//        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//ê1&#196;ü
//        NVIC_Init(&NVIC_InitStructure);

}
/*******************************************************************************
*  RCC_Configuration
*******************************************************************************/
void RCC_Configuration(void)
{       
        ErrorStatus HSEStartUpStatus;
          /* &#184;′&#206;&#187;&#207;μí3ê±&#214;óéè&#214;&#195;*/
          RCC_DeInit();

          /* &#191;a&#198;&#244;HSE*/                                                                                                                                                                                                                                                  
          RCC_HSEConfig(RCC_HSE_ON);

          /* μè′yHSE&#198;e&#213;e2¢&#206;è&#182;¨*/
          HSEStartUpStatus = RCC_WaitForHSEStartUp();
       
        /* HSEê&#199;·&#241;&#198;e&#213;&#241;3é1| */
          if(HSEStartUpStatus == SUCCESS)
          {
            /* HCLK(AHB)ê±&#214;ó&#212;′&#206;aSYSCLK 1·&#214;&#198;μ*/
            RCC_HCLKConfig(RCC_SYSCLK_Div1);

            /* PCLK2ê±&#214;ó&#212;′&#206;aHCLK(AHB) 1·&#214;&#198;μ */
            RCC_PCLK2Config(RCC_HCLK_Div1);

            /* PCLK1ê±&#214;ó&#212;′&#206;aHCLK(AHB) 2·&#214;&#198;μ */
            RCC_PCLK1Config(RCC_HCLK_Div2);

            /* éè&#214;&#195;FLASH&#209;óê±&#214;ü&#198;ú&#206;a2 */
            FLASH_SetLatency(FLASH_Latency_2);
            /* ê1&#196;üFLASH&#212;¤è&#161;&#187;o′&#230; */
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

            /* &#209;&#161;&#212;&#241;&#203;&#248;&#207;à&#187;·£¨PLL£&#169;ê±&#214;ó&#212;′&#206;aHSE 1·&#214;&#198;μ£&#172;±&#182;&#198;μêy&#206;a12£&#172;&#212;òê&#228;3&#246;&#198;μ&#194;ê&#206;a72MHz */
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_12);

            RCC_PLLCmd(ENABLE);          /* ê1&#196;ü PLL */

            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);                /* μè′y PLL ê&#228;3&#246;&#206;è&#182;¨ */

            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        //&#209;&#161;&#212;&#241;SYSCLKμ&#196;ê±&#214;ó&#212;′&#206;aPLL

            while(RCC_GetSYSCLKSource() != 0x08)
                {}
          }
       
}   
#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  while (1)
  {}
}

#endif

最佳答案

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

写的挺好的,高位先发处理数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

37

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2014-11-6
在线时间
91 小时
发表于 2022-4-15 17:39:45 | 显示全部楼层
本帖最后由 一叶扁舟V5 于 2023-12-20 09:09 编辑

写的挺好的,高位先发处理数据
多看美女有益健康!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 16:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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