历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2019年03月11日 | stm32 HAL库分析之CAN

2019-03-11 来源:eefocus

stm32 HAL库分析之CAN

阻塞发送

 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout)                       

 565 {                                                                                                   

 566   uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX;                                                

 567   uint32_t tickstart = 0U;                                                                          

 568                                                                                                     

 569   /* Check the parameters */                                                                        

 570   assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE));                                                   

 571   assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR));                                                      

 572   assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC));                                                      

 573                                                                                                     

 574   if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \                                                                                                                           

 575      ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \                                      

 576      ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2))                                          

 577   {                                                                                                 

 578     /* Process locked */                                                                            

 579     __HAL_LOCK(hcan);                                                                               

 580                                                                                                     

 581     /* Change CAN state */                                                                          

 582     switch(hcan->State)                                                                             

 583     {                                                                                               

 584       case(HAL_CAN_STATE_BUSY_RX0):                                                                 

 585           hcan->State = HAL_CAN_STATE_BUSY_TX_RX0;                                                  

 586           break;                                                                                    

 587       case(HAL_CAN_STATE_BUSY_RX1):                                                                 

 588           hcan->State = HAL_CAN_STATE_BUSY_TX_RX1;                                                  

 589           break;                                                                                    

 590       case(HAL_CAN_STATE_BUSY_RX0_RX1):                                                             

 591           hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1;                                              

 592           break;                                                                                    

 593       default: /* HAL_CAN_STATE_READY */                                                            

 594           hcan->State = HAL_CAN_STATE_BUSY_TX;                                                      

 595           break;                                                                                    

 596     }                                                                                               

 597                                                                                                     

 598     /* Select one empty transmit mailbox */                                                         

 599     if ((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)                                         

 600     {                                                                                               

 601       transmitmailbox = CAN_TXMAILBOX_0;                                                            

 602     }                                                                                               

 603     else if ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)                                    

 604     {                                                                                               

 605       transmitmailbox = CAN_TXMAILBOX_1;                                                            

 606     }                                                                                               

 607     else                                                                                            

 608     {                                                                                               

 609       transmitmailbox = CAN_TXMAILBOX_2;                                                            

 610     }                                                                                               

 611  

 612     /* Set up the Id */                                                                             

 613     hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;                               

 614     if (hcan->pTxMsg->IDE == CAN_ID_STD)                                                            

 615     {                                                                                               

 616       assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId));                                                                                                                                   

 617       hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21U) | \          

 618                                                   hcan->pTxMsg->RTR);                               

 619     }                                                                                               

 620     else                                                                                            

 621     {                                                                                               

 622       assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId));                                              

 623       hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \           

 624                                                   hcan->pTxMsg->IDE | \                             

 625                                                   hcan->pTxMsg->RTR);                               

 626     }                                                                                               

 627                                                                                                     

 628     /* Set up the DLC */                                                                            

 629     hcan->pTxMsg->DLC &= (uint8_t)0x0000000F;                                                       

 630     hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0U;                      

 631     hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC;                          

 632                                                                                                     

 633     /* Set up the data field */                                                                     

 634     hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3U] << 24U) | 

 635                                              ((uint32_t)hcan->pTxMsg->Data[2U] << 16U) |            

 636                                              ((uint32_t)hcan->pTxMsg->Data[1U] << 8U) |             

 637                                              ((uint32_t)hcan->pTxMsg->Data[0U]));                   

 638     hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7U] << 24U) | 

 639                                              ((uint32_t)hcan->pTxMsg->Data[6U] << 16U) |            

 640                                              ((uint32_t)hcan->pTxMsg->Data[5U] << 8U) |             

 641                                              ((uint32_t)hcan->pTxMsg->Data[4U]));                   

 642     /* Request transmission */                                                                      

 643     hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ;                               

 644                                                                                                     

 645     /* Get tick */                                                                                  

 646     tickstart = HAL_GetTick();                                                                      

 647                                                                                                     

 648     /* Check End of transmission flag */                                                            

 649     while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox)))                                      

 650     {                                                                                               

 651       /* Check for the Timeout */                                                                   

 652       if(Timeout != HAL_MAX_DELAY)                                                                  

 653       {                                                                                             

 654        if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout))

  655        {                                                                                            

 656          hcan->State = HAL_CAN_STATE_TIMEOUT;                                                       

 657                                                                                                     

 658          __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox);                                          

 659                                                                                                     

 660          /* Process unlocked */                                                                     

 661          __HAL_UNLOCK(hcan);                                                                        

 662          return HAL_TIMEOUT;                                                                        

 663         }                                                                                           

 664       }                                                                                             

 665     }                                                                                               

 666                                                                                                     

 667     /* Change CAN state */                                                                          

 668     switch(hcan->State)                                                                             

 669     {                                                                                               

 670       case(HAL_CAN_STATE_BUSY_TX_RX0):                                                              

 671           hcan->State = HAL_CAN_STATE_BUSY_RX0;                                                     

 672           break;                                                                                    

 673       case(HAL_CAN_STATE_BUSY_TX_RX1):                                                              

 674           hcan->State = HAL_CAN_STATE_BUSY_RX1;                                                     

 675           break;                                                                                    

 676       case(HAL_CAN_STATE_BUSY_TX_RX0_RX1):                                                          

 677           hcan->State = HAL_CAN_STATE_BUSY_RX0_RX1;                                                 

 678           break;                                                                                    

 679       default: /* HAL_CAN_STATE_BUSY_TX */                                                          

 680           hcan->State = HAL_CAN_STATE_READY;                                                        

 681           break;                                                                                    

 682     }                                                                                               

 683                                                                                                     

 684     /* Process unlocked */                                                                          

 685     __HAL_UNLOCK(hcan);                                                                             

 686                                                                                                     

 687     /* Return function status */                                                                    

 688     return HAL_OK;                                                                                                                                                                       

 689   }                                                                                                 

 690   else                                                                                              

 691   {                                                                                                 

 692     /* Change CAN state */                                                                          

 693     hcan->State = HAL_CAN_STATE_ERROR;                                                              

 694                                                                                                     

 695     /* Return function status */                                                                    

 696     return HAL_ERROR;                                                                               

 697   }                                                                                                 

 698 }                            



代码分析: 

1. 检查参数,根据TSR发送状态寄存器,判断可用的发送邮箱的个数,如果有可用邮箱的话就继续往下走,没有的话就报错. 

2. 由小往大选定一个可用的邮箱. 

3. 对邮箱的TIR寄存,标识寄存器器进行配置,主要是ID和发送的帧的数据类型,数据帧还是遥控帧. 

这里写图片描述

4. 将数据的长度放到长度控制和时间戳控制寄存器TDTR 

5. 将8个字节的数据放到邮箱的数据寄存器,分别是TDLR,TDHR,每个寄存器各放4个字节的数据. 

6. 将TIR寄存器的TXRQ置位,请求发送邮箱里面的数据. 

7. 循环等待,CAN_TSR_RQCP(上一次发送成功置位),CAN_TSR_TXOK(邮箱请求完成置位),CAN_TSR_TME(邮箱为空置位)这3个寄存器是否被置位.并且判断整个发送过程中是否超时. 

8. 根据状态返回值.


无阻塞发送

706 HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan)                                      

 707 {                                                                                                   

 708   uint32_t  transmitmailbox = CAN_TXSTATUS_NOMAILBOX;                                               

 709                                                                                                     

 710   /* Check the parameters */                                                                        

 711   assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE));                                                   

 712   assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR));                                                      

 713   assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC));                                                      

 714                                                                                                     

 715   if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \                                                                                                                           

 716      ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \                                      

 717      ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2))                                          

 718   {                                                                                                 

 719     /* Process Locked */                                                                            

 720     __HAL_LOCK(hcan);                                                                               

 721                                                                                                     

 722     /* Select one empty transmit mailbox */                                                         

 723     if((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)                                          

 724     {                                                                                               

 725       transmitmailbox = CAN_TXMAILBOX_0;                                                            

 726     }                                                                                               

 727     else if((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)                                     

 728     {                                                                                               

 729       transmitmailbox = CAN_TXMAILBOX_1;                                                            

 730     }                                                                                               

 731     else                                                                                            

 732     {                                                                                               

 733       transmitmailbox = CAN_TXMAILBOX_2;                                                            

 734     }                                                                                               

 735                                                                                                     

 736     /* Set up the Id */                                                                             

 737     hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;                               

 738     if(hcan->pTxMsg->IDE == CAN_ID_STD)                                                             

 739     {                                                                                               

 740       assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId));                                              

 741       hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21U) | \          

 742                                                 hcan->pTxMsg->RTR);                                 

 743     }                                                                                               

 744     else                                                                                            

 745     {                                                                                               

 746       assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId));                                              

 747       hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \           

 748                                                 hcan->pTxMsg->IDE | \                               

 749                                                 hcan->pTxMsg->RTR);                                 

 750     }                                                                                               

 751

  752     /* Set up the DLC */                                                                            

 753     hcan->pTxMsg->DLC &= (uint8_t)0x0000000F;                                                       

 754     hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0U;                      

 755     hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC;                          

 756                                                                                                     

 757     /* Set up the data field */                                                                                                                                                          

 758     hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3U] << 24U) | 

 759                                            ((uint32_t)hcan->pTxMsg->Data[2U] << 16U) |              

 760                                            ((uint32_t)hcan->pTxMsg->Data[1U] << 8U) |               

 761                                            ((uint32_t)hcan->pTxMsg->Data[0U]));                     

 762     hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7U] << 24U) | 

 763                                            ((uint32_t)hcan->pTxMsg->Data[6U] << 16U) |              

 764                                            ((uint32_t)hcan->pTxMsg->Data[5U] << 8U) |               

 765                                            ((uint32_t)hcan->pTxMsg->Data[4U]));                     

 766                                                                                                     

 767     /* Change CAN state */                                                                          

 768     switch(hcan->State)                                                                             

 769     {                                                                                               

 770       case(HAL_CAN_STATE_BUSY_RX0):                                                                 

 771           hcan->State = HAL_CAN_STATE_BUSY_TX_RX0;                                                  

 772           break;                                                                                    

 773       case(HAL_CAN_STATE_BUSY_RX1):                                                                 

 774           hcan->State = HAL_CAN_STATE_BUSY_TX_RX1;                                                  

 775           break;                                                                                    

 776       case(HAL_CAN_STATE_BUSY_RX0_RX1):                                                             

 777           hcan->State = HAL_CAN_STATE_BUSY_TX_RX0_RX1;                                              

 778           break;                                                                                    

 779       default: /* HAL_CAN_STATE_READY */                                                            

 780           hcan->State = HAL_CAN_STATE_BUSY_TX;                                                      

 781           break;                                                                                    

 782     }                                                                                               

 783                                                                                                     

 784     /* Set CAN error code to none */                                                                

 785     hcan->ErrorCode = HAL_CAN_ERROR_NONE;                                                           

 786                                                                                                     

 787     /* Process Unlocked */                                                                          

 788     __HAL_UNLOCK(hcan);                                                                             

 789                                                                                                     

 790     /* Request transmission */                                                                      

 791     hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ;                               

 792

  793     /* Enable Error warning, Error passive, Bus-off,                                                

 794        Last error and Error Interrupts */                                                           

 795     __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG |                                                          

 796                               CAN_IT_EPV |                                                          

 797                               CAN_IT_BOF |                                                          

 798                               CAN_IT_LEC |                                                          

 799                               CAN_IT_ERR |                                                          

 800                               CAN_IT_TME);                                                          

 801   }                                                                                                 

 802   else                                                                                              

 803   {                                                                                                 

 804     /* Change CAN state */                                                                          

 805     hcan->State = HAL_CAN_STATE_ERROR;                                                              

 806                                                                                                     

 807     /* Return function status */                                                                    

 808     return HAL_ERROR;                                                                               

 809   }                                                                                                 

 810                                                                                                     

 811   return HAL_OK;                                                                                                                                                                         

 812 }                                                                                       


代码分析: 

前面1-6的步骤和阻塞是发送都是一样的. 

7. 开启中断 

一帧数据发送完成之后,进入can的中断. 

注意开启的中断:


449 #define CAN_IT_TME                  ((uint32_t)CAN_IER_TMEIE)   /*!< Transmit mailbox empty interrupt */


463 /* Error Interrupts */                                                                                                            

464 #define CAN_IT_EWG                  ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt   */     

465 #define CAN_IT_EPV                  ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt   */     

466 #define CAN_IT_BOF                  ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt         */     

467 #define CAN_IT_LEC                  ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */     

468 #define CAN_IT_ERR                  ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt           */ 


一个发送邮箱空中断,还有5种错误情况引起的中断


1251   if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME))                                                     

1252   {                                                                                                 

1253     tmp1 = __HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0);                                        

1254     tmp2 = __HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1);                                        

1255     tmp3 = __HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2);                                                                     

1256     if(tmp1 || tmp2 || tmp3)                                                                                                     

1257     {                                                                                                                            

1258       tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0);                                                            

1259       tmp2 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1);                                              

1260       tmp3 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2);                                              

1261       /* Check Transmit success */                                                                  

1262       if(tmp1 || tmp2 || tmp3)                                                                      

1263       {                                                                                             

1264         /* Call transmit function */                                                                                             

1265         CAN_Transmit_IT(hcan);                                                                                                   

1266       }                                                                                                                          

1267       else /* Transmit failure */                                                                                                

1268       {                                                                                                                          

1269         /* Set CAN error code to TXFAIL error */                                                                                 

1270         errorcode |= HAL_CAN_ERROR_TXFAIL;                                                                                       

1271       }                                                                                                                          

1272                                                                                                                                  

1273       /* Clear transmission status flags (RQCPx and TXOKx) */                                       

1274       SET_BIT(hcan->Instance->TSR, CAN_TSR_RQCP0  | CAN_TSR_RQCP1  | CAN_TSR_RQCP2 | \              

1275                                    CAN_FLAG_TXOK0 | CAN_FLAG_TXOK1 | CAN_FLAG_TXOK2);               

1276     }                                                                                               

1277   }  


其中判断,发送是否完成的代码. 

1. 第一句话还是和之前的一样,读取到三个邮箱的状态,也就是RQCP, TXOK,TME,三个寄存器的状态. 

2. 第二句话就是进一步去判断,TXOK寄存器,检查三个寄存器中是否有发送完成的邮箱. 

 


这里写图片描述 
这里写图片描述

具体的判断逻辑如上所示,也就是去检查TSR这个寄存器的第1,9,11位来判断是否发送完成.如果发送完成就可去调用CAN_Transmit_IT,在这个里面主要是关中断,再调用用户的回调函数. 

3. 清掉RQCP, TXOK寄存器的标志位


题外话: 

公司的代码,移植的是can的驱动代码,里面有一句话让我觉得很奇怪:


    if(HAL_CAN_Transmit(&g_sCAN_Handler[dwDevice], 10) != HAL_OK)

    {//注:如果发送中断使能,因在发送中断里会清相关标志,这样会导致此函数会超时,而发送实际是成功的

        return FALSE; 

    }


为什么会有这样一句奇怪的注释,这里使用的阻塞的方式发送数据,那么计算超时的时候就会检查RQCP, TXOK,这两个位用来判断是否发送完成。但是在hal库里面没有发送时中断是关掉了,根本就不会在中断里面清掉标志位,根本就不存在这个问题。当我们使用中断的方式发送时, 又不会进行超时判断。因此只有在使用不规范的时候才会出现这个问题,因此这句注释就是无稽之谈。


推荐阅读

史海拾趣

Dynawave Incorporated公司的发展小趣事

Dynawave Incorporated的创始人李明,是一位在电子行业有着丰富经验的工程师。他深知随着科技的发展,无线通信技术将成为未来发展的重要方向。因此,李明带领一支技术团队,夜以继日地研发新型无线通信技术。经过数月的努力,他们成功开发出了一种具有高效能、低能耗特点的无线传输技术,这一技术为Dynawave在行业中赢得了初步声誉。

BLACK&DECKER公司的发展小趣事

2010年3月15日,BLACK&DECKER迎来了公司历史上的一个重要时刻——与史丹利公司合并组建史丹利百得公司。这一合并不仅使BLACK&DECKER获得了更强大的资源和市场支持,还为其未来的发展提供了更广阔的空间。合并后的史丹利百得公司致力于提供整合的五金工具、存储设备和安防系统解决方案,以满足全球消费者的多样化需求。通过整合双方的优势资源和技术力量,史丹利百得公司有望在电子行业中取得更加辉煌的成就。

综上所述,BLACK&DECKER公司在电子行业中的发展故事充满了创新、进取和成功的元素。从创立初期的艰苦创业到如今的全球领先品牌,BLACK&DECKER凭借其卓越的产品质量、技术创新和市场拓展能力,赢得了消费者的信任和市场的认可。未来,随着科技的不断进步和市场需求的不断变化,BLACK&DECKER将继续保持创新精神,推动电子行业的持续发展。

Defense Supply Center Columbus公司的发展小趣事

在电子行业,产品质量是企业生存和发展的关键。Defense Supply Center Columbus公司始终将质量管理放在首位,建立起一套完善的质量管理体系。公司严格按照国际标准进行生产和检测,确保每一件产品都符合质量要求。同时,公司还注重员工的培训和教育,提高员工的质量意识和操作技能。这些措施的实施,使得公司的产品质量得到了显著提升,赢得了客户的广泛赞誉。

Arctic Silicon Devices公司的发展小趣事

在电子行业的发展过程中,创新合作是推动产业进步的重要动力。Arctic Silicon Devices积极与高校、科研机构等合作,共同开展技术研发和人才培养。通过共享资源、互通有无,公司不仅获得了更多的创新灵感和技术支持,还推动了整个电子行业的技术进步和产业升级。

BB公司的发展小趣事

在电子行业竞争日益激烈的背景下,BB公司深知技术创新是企业发展的核心动力。因此,公司投入大量研发资金,积极引进和培养人才,不断推动技术创新。经过多年的努力,BB公司在模拟集成电路领域取得了多项重大突破,推出了一系列具有自主知识产权的创新产品。这些产品不仅提升了BB公司的市场竞争力,也为整个电子行业的发展做出了贡献。

Anpec(茂达)公司的发展小趣事

随着市场的不断变化和客户需求的日益多样化,茂达电子开始积极扩展产品线。除了原有的电源转换及电源管理IC外,公司还成功研发了放大器及驱动IC、离散式功率元件等系列产品。这些新产品的推出,不仅丰富了茂达电子的产品线,也为客户提供了更多样化的选择。

问答坊 | AI 解惑

全面认识存储器(RAM与DRAM)

下面这篇文章相当全面的介绍了各种RAM的基本原理读写及区别. 好像也是从各个地方收集到一起的,不过组织还可以.可惜是PDF格式而且带框的,不知道如何弄下来.如果你对RAM认识还不够的话,强烈推荐你看看. http://www.dz3w.com/info/basic/memory/index ...…

查看全部问答>

看看TI高层如何管理自己的时间

德州仪器(TI)全球特殊应用产品部大中国业务策略拓展副总裁 林坤山 林坤山博士以数字信号处理器(DSP)先锋著称,是早期的DSP博士之一,曾于70年代后期在美国新墨西哥与田纳西大学任教。拥有12项专利的林博士,曾在国际会议与期刊杂志上发表超过5 ...…

查看全部问答>

简述滤波器的发展历程及前景

滤波器的发展历程   ---凡是有能力进行信号处理的装置都可以称为滤波器。在近代电信设备和各类控制系统中,滤波器应用极为广泛;在所有的电子部件中,使用最多,技术最为复杂的要算滤波器了。滤波器的优劣直接决定产品的优劣,所以,对 ...…

查看全部问答>

tornado 工程中如何编译汇编代码(*.s)?

我用Makefile是可以编*.s代码的,但工程中就是不可以. 不知为何? …

查看全部问答>

请帮忙推荐arm9开发板

要求如下 1、支持wince6 2、带有电话、gprs、短信模块 3、ARM9 CPU 总的来说就是方便我能用这个开发板进行一款基于wince6平台的手机开发,价格2000以内吧,如果有性价比更好的,价格高一些也可以,谢谢大家了!…

查看全部问答>

有满足如下要求的串口调试工具吗?

1.在单机上调试串口通讯, 2.不连接串口的收发针脚, 在这种情况下,有没有什么调试工具可以模拟串口的通讯?…

查看全部问答>

lm3s9b96上接3g上网卡或wifi的usb 开发

本人新人一个。。 以前不做这块的,刚去一个新单位,领导要开发这么一个东西。 主要目的就是通过usb口接的3g或wifi模块同外部设备进行数据传输。   大家有什么方案建议之类的没有? 例程最好了。学习文档之类的也非常感谢。   多 ...…

查看全部问答>

dsp 28335

有谁能告诉我警告的意思? <Linking> warning: creating output section "PartIdRegsFile" without a SECTIONS    specification …

查看全部问答>