STM32F105 CAN1 Problem
3 years 3 months ago #457
by jh_elec
STM32F105 CAN1 Problem was created by jh_elec
Moin Moin,
ich bin relativ neu in der Welt der STM´s.
Nun versuche ich schon seit ein paar Stunden den CAN1 zum laufen zu bekommen.
Das ganze soll auf einen STM32F105R8 passieren.
Konfiguriert habe ich ihn hoffentlich richtig?!
Vermutlich habe ich die System Frequenz nicht richtig konfiguriert?
Kann mir da jemand weiterhelfen?
Hier die CAN Init..mfg jh_elec
ich bin relativ neu in der Welt der STM´s.
Nun versuche ich schon seit ein paar Stunden den CAN1 zum laufen zu bekommen.
Das ganze soll auf einen STM32F105R8 passieren.
Konfiguriert habe ich ihn hoffentlich richtig?!
Vermutlich habe ich die System Frequenz nicht richtig konfiguriert?
Kann mir da jemand weiterhelfen?
Hier die CAN Init..
void _canInit(void)
{
GPIO_InitTypeDef gpiox;
CAN_InitTypeDef canx;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
gpiox.GPIO_Pin = GPIO_Pin_8;
gpiox.GPIO_Mode = GPIO_Mode_IPU;
gpiox.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpiox);
gpiox.GPIO_Pin = GPIO_Pin_9;
gpiox.GPIO_Mode = GPIO_Mode_AF_PP;
gpiox.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpiox);
GPIO_PinRemapConfig(GPIO_Remap1_CAN1 , ENABLE);
CAN_DeInit(CAN1);
canx.CAN_SJW = CAN_SJW_1tq; // SJW 1-4
canx.CAN_BS1 = stBitrate[_500_kbit].BS1; // Samplepoint 72%
canx.CAN_BS2 = stBitrate[_500_kbit].BS2; // Samplepoint 72%
canx.CAN_Prescaler = stBitrate[_500_kbit].Prescaler;
canx.CAN_Mode = CAN_Mode_Normal;
canx.CAN_TTCM = DISABLE;
canx.CAN_ABOM = ENABLE;
canx.CAN_AWUM = DISABLE;
canx.CAN_NART = ENABLE;
canx.CAN_RFLM = DISABLE;
canx.CAN_TXFP = DISABLE;
CAN_Init(CAN1, &canx);
}
Please Anmelden or Create an account to join the conversation.
3 years 3 months ago - 3 years 3 months ago #458
by geier99
Replied by geier99 on topic STM32F105 CAN1 Problem
Hallo jh_elec
wenn Du Dir nicht sicher bist, dass Deine Clock-Konfiguration stimmt, dann füge doch mal folgendes ein:
den printf kannst Du nur verwenden, wenn er bei Dir aktiviert ist, falls nicht kannst du Dir im Debugger die Werte anschauen. Und ein Blick in das "RCC->CR" Register kann auch nicht schaden, hier siehst Du ob der HSE läuft.
Und hier noch wie ich den Clock auf 72MHz stelle:
Grüße
Andreas
PS: Bei mir läuft der CAN mit einem 105er problemlos mit einem 8 MHz Quarz und einen Sysclock von 72 MHz.
wenn Du Dir nicht sicher bist, dass Deine Clock-Konfiguration stimmt, dann füge doch mal folgendes ein:
RCC_ClocksTypeDef RCC_ClockFreq;
RCC_GetClocksFreq(&RCC_ClockFreq);
printf("\nClock-Konfiguration:\nSYSCLK=%10d Hz\nPCLK1 =%10d Hz\nPCLK2 =%10d Hz\nHCLK =%10d Hz", RCC_ClockFreq.SYSCLK_Frequency,RCC_ClockFreq.PCLK1_Frequency,RCC_ClockFreq.PCLK2_Frequency,RCC_ClockFreq.HCLK_Frequency);
den printf kannst Du nur verwenden, wenn er bei Dir aktiviert ist, falls nicht kannst du Dir im Debugger die Werte anschauen. Und ein Blick in das "RCC->CR" Register kann auch nicht schaden, hier siehst Du ob der HSE läuft.
Und hier noch wie ich den Clock auf 72MHz stelle:
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS){
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_9); // PLL konfigurieren: HSE / 1 * 9 = 72MHZ
RCC_PLLCmd(ENABLE); // PLL einschalten
while(RCC_GetSYSCLKSource() != 0x08){
}
RCC_HSICmd(DISABLE);
}
SystemCoreClockUpdate();
Grüße
Andreas
PS: Bei mir läuft der CAN mit einem 105er problemlos mit einem 8 MHz Quarz und einen Sysclock von 72 MHz.
Last edit: 3 years 3 months ago by geier99.
Please Anmelden or Create an account to join the conversation.
Time to create page: 0.094 seconds
- Aktuelle Seite:
-
Home
-
Forum
-
Projekte
-
STM-32 Projekte
- STM32F105 CAN1 Problem