Перейти к содержанию
    

stm32f105

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

 

Имеется изделие на 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 - всё с боем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С таймером подскажу. Он на удвоенной частоте шины, если делитель шины 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

И ведь видел это на схеме таймера!!! Глянул бегло и мне показалось (почему-то) что следует читать так: Если делитель не 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 контроллер изучил вдоль и поперёк. :) Могу статьи писать. )) Красиво построен. Надеюсь больше проблем с ним не будет.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...