初级会员

- 积分
- 78
- 金钱
- 78
- 注册时间
- 2016-3-14
- 在线时间
- 12 小时
|
5金钱
iap方面通过void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)。跳转什么的都可以成功。
问题在于appbuf怎么从can得到,我通过一个软件能从pc端通过can发送bin文件到单片机,单片机要怎么把这个bin文件转为数据呢?
u8 Can_Receive_Msg(u8 *buf)
{
u32 i;
CanRxMsg RxMessage;
if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0; //没有接收到数据,直接退出
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//读取数据
for(i=0;i<8;i++)
buf[i]=RxMessage.Data[i];
CAN_ID=RxMessage.StdId;//读取CAN的ID数据
return RxMessage.DLC; //返回接收的数据长度
}
我接触的can都是一个id只接收8个数据位,然后处理数据,现在不知道怎么才能接收一整个bin文件然后转移到appbuf里面。
原子哥的串口iap中是这样设定的
#define USART_REC_LEN 55*1024 //定义最大接收字节数 55K
u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000.
//(这个设定我也没懂什么意思,我的SD卡升级程序中没有这个设定也能正常升级程序)
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据
{
res=USART_ReceiveData(USART1);
if(USART_RX_CNT<USART_REC_LEN)
{
USART_RX_BUF[USART_RX_CNT]=res;
USART_RX_CNT++;
}
}
原子哥是在串口中断把数据一个个接收然后存到USART_RX_BUF里面作为appbuf,但是我的can的话要怎么才能这样处理,(最好就不要用到can中断。)
|
最佳答案
查看完整内容[请看2#楼]
bin文件就是最原始的的二进制文件了,不管三七二十一,将接收到的数据,写入你指定的flash地址即可。相反,如果是hex文件,还要作解析提取有效数据。
|