
Мой листинг настройки Can:
CODE
void Init_Can(void)
{
// Инициализация порта
RCC_APB2PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); // включаем тактирование CAN1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // включаем тактирование AFIO
GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE); // Переносим Can1 на PB8, PB9
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // включаем тактирование порта B
// CAN RX pin PB.8 input push pull
GPIO_InitTypeDef INIT_GPIO_B; // Объявляем структуру для инициализации порта
GPIO_StructInit(&INIT_GPIO_B); // заполняем дефолтными значениями
INIT_GPIO_B.GPIO_Mode = GPIO_Mode_IPU; // Режим - вход Pull-up (см. RM0041 p.154)
INIT_GPIO_B.GPIO_Pin = GPIO_Pin_8; // Настраиваем пин 8 порта B
INIT_GPIO_B.GPIO_Speed = GPIO_Speed_10MHz; // Скорость изменения пина
GPIO_Init(GPIOC, &INIT_GPIO_B); // Загрузка структуры настройки
// CAN TX pin PB.9 Alternative function Push-pull
INIT_GPIO_B.GPIO_Mode = GPIO_Mode_AF_PP; // Режим - Alternative Push-pull
INIT_GPIO_B.GPIO_Pin = GPIO_Pin_9; // Настраиваем пин 9 порта B
INIT_GPIO_B.GPIO_Speed = GPIO_Speed_10MHz; // Скорость изменения пина
GPIO_Init(GPIOC, &INIT_GPIO_B); // Загрузка структуры настройки
//Переход в режим настройки CAN
uint8_t ini = CAN_OperatingModeRequest(CAN1, CAN_OperatingMode_Initialization);
CAN_InitTypeDef CAN1_InitStruct;
CAN_StructInit(&CAN1_InitStruct);
CAN1_InitStruct.CAN_BS1 = CAN_BS1_3tq;
CAN1_InitStruct.CAN_BS2 = CAN_BS2_2tq;
CAN1_InitStruct.CAN_Prescaler = 24; //250 kbit/s (Prescaler = 6*10^6 / Speed)
CAN_Init(CAN1, &CAN1_InitStruct);
// Переход в нормальный режим работы CAN
uint8_t normal = CAN_OperatingModeRequest(CAN1, CAN_OperatingMode_Normal);
{
// Инициализация порта
RCC_APB2PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); // включаем тактирование CAN1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // включаем тактирование AFIO
GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE); // Переносим Can1 на PB8, PB9
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // включаем тактирование порта B
// CAN RX pin PB.8 input push pull
GPIO_InitTypeDef INIT_GPIO_B; // Объявляем структуру для инициализации порта
GPIO_StructInit(&INIT_GPIO_B); // заполняем дефолтными значениями
INIT_GPIO_B.GPIO_Mode = GPIO_Mode_IPU; // Режим - вход Pull-up (см. RM0041 p.154)
INIT_GPIO_B.GPIO_Pin = GPIO_Pin_8; // Настраиваем пин 8 порта B
INIT_GPIO_B.GPIO_Speed = GPIO_Speed_10MHz; // Скорость изменения пина
GPIO_Init(GPIOC, &INIT_GPIO_B); // Загрузка структуры настройки
// CAN TX pin PB.9 Alternative function Push-pull
INIT_GPIO_B.GPIO_Mode = GPIO_Mode_AF_PP; // Режим - Alternative Push-pull
INIT_GPIO_B.GPIO_Pin = GPIO_Pin_9; // Настраиваем пин 9 порта B
INIT_GPIO_B.GPIO_Speed = GPIO_Speed_10MHz; // Скорость изменения пина
GPIO_Init(GPIOC, &INIT_GPIO_B); // Загрузка структуры настройки
//Переход в режим настройки CAN
uint8_t ini = CAN_OperatingModeRequest(CAN1, CAN_OperatingMode_Initialization);
CAN_InitTypeDef CAN1_InitStruct;
CAN_StructInit(&CAN1_InitStruct);
CAN1_InitStruct.CAN_BS1 = CAN_BS1_3tq;
CAN1_InitStruct.CAN_BS2 = CAN_BS2_2tq;
CAN1_InitStruct.CAN_Prescaler = 24; //250 kbit/s (Prescaler = 6*10^6 / Speed)
CAN_Init(CAN1, &CAN1_InitStruct);
// Переход в нормальный режим работы CAN
uint8_t normal = CAN_OperatingModeRequest(CAN1, CAN_OperatingMode_Normal);
Данный код никак не влияет на состояние CAN-интерфейса и он продолжает спокойно пребывать в режиме SLEEP.
Функция CAN_OperatingModeRequest() взята из файла stm32f10x_can.h.
Помогите, пожалуйста, разобраться.