2013-04-18 04:25 PM
Hello, im trying to comunicate with other kits on CAN.
After 4
weeks, I
still
have not found
a solution
... Can someone help me with CAN please? :( I have tranceiver, and need comunicate with standart CAN protocol. When im debuging this, CAN wake up from sleep, but cant come out from INAK on MSR. If someone have working project on keil,I will be
grateful
.clocks:
/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
&sharpdefine PLL_M 25
&sharpdefine PLL_N 336
/* SYSCLK = PLL_VCO / PLL_P */
&sharpdefine PLL_P 2
/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */
&sharpdefine PLL_Q 7
/******************************************************************************/
program:
&sharpdefine CANx CAN1
&sharpdefine CAN_FILTER_NMR 0
&sharpdefine CAN_CLK RCC_APB1Periph_CAN1
&sharpdefine CAN_RX_PIN GPIO_Pin_8
&sharpdefine CAN_TX_PIN GPIO_Pin_9
&sharpdefine CAN_GPIO_PORT GPIOB
&sharpdefine CAN_GPIO_CLK RCC_AHB1Periph_GPIOB
&sharpdefine CAN_AF_PORT GPIO_AF_CAN1
&sharpdefine CAN_RX_SOURCE GPIO_PinSource0
&sharpdefine CAN_TX_SOURCE GPIO_PinSource1
int main(void){
// inicializace struktur
GPIO_InitTypeDef GPIO_InitStructure;
// zapnuti hodin
RCC_AHB1PeriphClockCmd(CAN_GPIO_CLK, ENABLE);
// alternativni funkce
GPIO_PinAFConfig(GPIOB, GPIO_Pin_9, GPIO_AF_CAN1);
GPIO_PinAFConfig(GPIOB, GPIO_Pin_8, GPIO_AF_CAN1);
// inicializace GPIO
GPIO_DeInit(GPIOB);
/* Configure PD0 in R */
GPIO_InitStructure.GPIO_Pin = CAN_RX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Configure PD1 out T */
GPIO_InitStructure.GPIO_Pin = CAN_TX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Hodiny CAN
RCC->APB1ENR |= RCC_APB1Periph_CAN1;
// RESET CAN
RCC->APB1RSTR |= RCC_APB1Periph_CAN1;
RCC->APB1RSTR &= ~RCC_APB1Periph_CAN1;
// probuzeni CAN ze sleepu
CAN1->MCR &= (~(uint32_t)CAN_MCR_SLEEP);
// request inicializace
CAN1->MCR |= CAN_MCR_INRQ ;
// nastaven� casovani
// CAN1->BTR = (uint32_t)((uint32_t)((uint8_t)0x00) << 30) | \
// ((uint32_t)((uint8_t)0x00) << 24) | \
// ((uint32_t)((uint8_t)0x0D) << 16) | \
// ((uint32_t)((uint8_t)0x05) << 20) | \
// ((uint32_t)16 - 1);
// request deinicializace
CANx->MCR &= ~(uint32_t)CAN_MCR_INRQ;
while(1){};
} #can-keil-c-uvision-4
2013-04-18 04:38 PM
// alternativni funkce
GPIO_PinAFConfig(GPIOB, GPIO_Pin_9, GPIO_AF_CAN1); // PinSource ! PinSource !
GPIO_PinAFConfig(GPIOB, GPIO_Pin_8, GPIO_AF_CAN1);
GPIO_Init(GPIOD, &GPIO_InitStructure); //<<< GPIOB