打印
[STM32F1]

stm32f103移植到f105故障

[复制链接]
3083|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
banxiafeixia|  楼主 | 2017-4-1 15:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这几天一直在鼓捣CAN通信,用的stm32f103内置can控制器,在103上调通可以收发报文,但是今天把程序下载到105之后,105完全没有反应,很心痛。。
沙发
banxiafeixia|  楼主 | 2017-4-1 15:19 | 只看该作者
这些是can的配置文件,新人求带啊。

使用特权

评论回复
板凳
banxiafeixia|  楼主 | 2017-4-1 15:21 | 只看该作者
#include "can.h"
#include "stm32f10x_can.h"
unsigned int CAN_ID;
unsigned char CAN_DATA0=0,CAN_DATA1=0,CAN_DATA2=0,CAN_DATA3=0,CAN_DATA4=0,CAN_DATA5=0,CAN_DATA6=0,CAN_DATA7=0;
unsigned char CanFlag,Display;

//extern void GPIO_Configuration(void);
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* CAN Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

  GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE);
  /* Configure CAN pin : RX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
  /* Configure CAN pin: TX */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);       
             
                                 
}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable CAN1 RX0 interrupt IRQ channel */
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void CAN_Configuration(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  NVIC_Configuration();
  GPIO_Configuration();
  /* CAN register init */
  CAN_DeInit(CAN1);
  CAN_StructInit(&CAN_InitStructure);

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM = DISABLE;
  CAN_InitStructure.CAN_ABOM = DISABLE;
  CAN_InitStructure.CAN_AWUM = DISABLE;
  CAN_InitStructure.CAN_NART = DISABLE;
  CAN_InitStructure.CAN_RFLM = DISABLE;
  CAN_InitStructure.CAN_TXFP = ENABLE;
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;   
  CAN_InitStructure.CAN_BS1 = CAN_BS1_4tq;   
  CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;     
  CAN_InitStructure.CAN_Prescaler = 45;      


   
  if (CAN_Init(CAN1,&CAN_InitStructure) == CANINITFAILED)                
  {
                                                                                    
  }       

  CAN_FilterInitStructure.CAN_FilterNumber=0;   
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);  
  CAN_FilterInit(&CAN_FilterInitStructure);
}
       
void CANWriteData(unsigned int ID)
{
  CanTxMsg TxMessage;




  TxMessage.StdId = ID;
//TxMessage.ExtId = 0x00;     //ÉèÖÃÀ©Õ¹id  À©Õ¹id¹²18λ
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;   
  TxMessage.DLC = 8;            
  TxMessage.Data[0] = CAN_DATA0;   
  TxMessage.Data[1] = CAN_DATA1;   
  TxMessage.Data[2] = CAN_DATA2;   
  TxMessage.Data[3] = CAN_DATA3;   
  TxMessage.Data[4] = CAN_DATA4;   
  TxMessage.Data[5] = CAN_DATA5;     
  TxMessage.Data[6] = CAN_DATA6;   
  TxMessage.Data[7] = CAN_DATA7;      
  CAN_Transmit(CAN1,&TxMessage);
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{
  CanRxMsg RxMessage;
  CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);  
  CAN_ID=RxMessage.StdId;
  CAN_DATA0=RxMessage.Data[0];
  CAN_DATA1=RxMessage.Data[1];
  CAN_DATA2=RxMessage.Data[2];
  CAN_DATA3=RxMessage.Data[3];
  CAN_DATA4=RxMessage.Data[4];
  CAN_DATA5=RxMessage.Data[5];
  CAN_DATA6=RxMessage.Data[6];
  CAN_DATA7=RxMessage.Data[7];
  CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
  CanFlag = ENABLE;
}

使用特权

评论回复
地板
selongli| | 2017-4-1 22:45 | 只看该作者
这个芯片是互相兼容代码的?

使用特权

评论回复
5
selongli| | 2017-4-1 22:49 | 只看该作者
下载之后也得看内部寄存器是不是一样的。

使用特权

评论回复
6
chenghaichao| | 2017-4-1 22:59 | 只看该作者
中断向量名字不一样吧。

使用特权

评论回复
7
wangdezhi| | 2017-4-2 11:26 | 只看该作者
芯片不兼容,寄存器也不兼容。

使用特权

评论回复
8
wangdezhi| | 2017-4-2 11:28 | 只看该作者
没有用过STM32F105,不知道配置有什么不一样的。

使用特权

评论回复
9
dsyq| | 2017-4-2 14:21 | 只看该作者
自己整,才会升级。

使用特权

评论回复
10
lzbf| | 2017-4-2 22:42 | 只看该作者
两个芯片肯定不兼容而已。

使用特权

评论回复
11
lzbf| | 2017-4-2 22:43 | 只看该作者
重新编一个CAN通信程序试试。

使用特权

评论回复
12
zchong| | 2017-4-3 11:11 | 只看该作者
注意波特率

使用特权

评论回复
13
uptown| | 2017-4-3 22:43 | 只看该作者
有什么问题?不兼容,重新写吧。

使用特权

评论回复
14
pklong| | 2017-4-4 21:18 | 只看该作者
你也是用的STM32F103编译的?

使用特权

评论回复
15
pklong| | 2017-4-4 21:47 | 只看该作者
寄存器有不一样的,不能直接使用。

使用特权

评论回复
16
banxiafeixia|  楼主 | 2017-4-19 21:56 | 只看该作者

对的,就是时钟配置不对,105用的16M晶振没注意,让我研究了好几天才弄好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

93

帖子

2

粉丝