Jump to content

    
Sign in to follow this  
SapegoAL

stm32f105

Recommended Posts

Может кто знает проблему - подскажет.

 

Имеется изделие на stm32f105 (CL).

Запущено на частоте 8*9 = 72. Это проверил ч/з MCO осциллографом.

Частота APB2 = 72/1, а APB2 = 72/2 = 36 ( в регистре RCC_CFGR PPRE1 = 4)

Согласно даташиту частота TIM2 (а также CAN), соответственно должна быть равна 36.

Но выведенный сигнал при расчетё получается такой, как будто частота таймера = 72. Всё пересчитывал уже 10 раз.

 

Собственно сам таймер - бог с ним. Непонятно откуда расхождение расчётной частоты и фактической. Почему-то не работает CAN. Собственно из-за этого и полез разбираться.

 

CAN программирую так.

TS1 = 2 (3 такта)

TS2 = 4 (5 такт.)

SJW = 0 (1 такт)

BRP = F (делитель 16)

 

То есть по моему пониманию часто та должна быть 36 / 16 / (3+5+1) = 250 кбит.

 

Подскажите где я неправ.

 

PS: Что-то уж очень туго идёт с stm32. Тот же CAN на LPC2478 занял 1 день, да и прочее тоже всё легко и приятно. А здесь шляпа на шляпе. ADC, таймер, CAN - всё с боем.

Share this post


Link to post
Share on other sites

С таймером подскажу. Он на удвоенной частоте шины, если делитель шины APB не единица.

1. if the APB prescaler is 1, the timer clock frequencies are set to the same frequency as

that of the APB domain to which the timers are connected.

2. otherwise, they are set to twice (×2) the frequency of the APB domain to which the

timers are connected.

Share this post


Link to post
Share on other sites

Спасибо большое!

 

И ведь видел это на схеме таймера!!! Глянул бегло и мне показалось (почему-то) что следует читать так: Если делитель не 1, то при всех остальных делителях частота делится на 2. Ну то есть (я подумал) частота таймера либо 72 либо 36. Почему - не знаю...

 

Теперь всё понятно.

 

С CAN тоже разобрался. В том примере что я взял за исходное было указано несколько контроллеров с разной цокалёвкой. Ну и пины объявлялись примерно так:

 

// *** CAN1 ***

#define RCC_APB2Periph_GPIO_CAN1 RCC_APB2Periph_GPIOA

#define CAN1_GPIO_Remap GPIO_Remap2_CAN1

#define CAN1_GPIO GPIOA

#define CAN1_GPIO_Pin_RX GPIO_Pin_11

#define CAN1_GPIO_Pin_TX GPIO_Pin_12

 

Здесь приведено уже правильное написание. А в оригинальном примере RX и TX были попутаны местами. Видимо при проверке примера - проверили только на одном каком-то камне. А мне просто неповезло. :)

 

Дальше по тексту головы ты уже работаешь с CAN1_GPIO_Pin_RX. И тебе даже в голову те может придти что это TX на самом деле. Причём сам CAN настроен был правильно. Ктож мог подумать, что пины не так. Пока разобрался...

 

Зато сам CAN контроллер изучил вдоль и поперёк. :) Могу статьи писать. )) Красиво построен. Надеюсь больше проблем с ним не будет.

 

Всем спасибо за внимание.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this