IO口配置:
根据你自己板子上的IO口来配置,
我的can是PA11和PA12。
CAN波特率计算.
举个例子:我要配置成500K.
那么我的tpclk1 =60M.
从这个图可以看出,但是我的是F470,是60M。
那么:
1.tq = (1/60M )* 12=(1/5)us ,或者这么理解 1/(60M/12),那么12就是分频的意思。
2.𝑡𝑆𝑌𝑁𝐶_𝑆𝐸𝐺 为 1 tq(一般固定为1)
𝑡𝐵𝑆1 + 𝑡𝐵𝑆2凑出一个9 * tq就行.
我这里𝑡𝐵𝑆1 = 5 ,𝑡𝐵𝑆2=4.
所以:(1+ 5 + 4 ) tq = 10 * (1/5)us = 2us
𝐵𝑎𝑢𝑑𝑅𝑎𝑡e = 1 / 2us = 0.5 *10 ^6 hz = 500 000hz = 500K
can_parameter.time_segment_1 = CAN_BT_BS1_5TQ;
can_parameter.time_segment_2 = CAN_BT_BS2_4TQ;
can_parameter.prescaler = 12;
#include "gd32f4xx.h"
#include <stdio.h>
#include "gd32f470z_eval.h"
extern FlagStatus receive_flag;
extern can_receive_message_struct receive_message;
can_trasnmit_message_struct transmit_message;
void nvic_config(void);
void led_config(void);
void gpio_config(void);
ErrStatus can_networking(void);
void can_networking_init(void);
void delay(void);
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
receive_flag = RESET;
/* configure Tamper key */
gd_eval_key_init(KEY_TAMPER, KEY_MODE_GPIO);
/* configure GPIO */
gpio_config();
/* configure USART */
gd_eval_com_init(EVAL_COM0);
/* configure NVIC */
nvic_config();
/* configure LEDs */
led_config(