STC32G12K128是国芯公司的32位单片机,该芯片的P0.0~P0.3口是可以被复用为CAN设备接口的。其中P0.0和P0.1构成CAN1,P0.2和P0.3构成CAN2。根据数据手册,STC32G 系列单片机内部集成两组独立的 CAN 总线功能单元,支持 CAN 2.0 协议,可以收到标准帧和扩展帧。
为了复用为CAN设备,需要设置P_SW1和P_SW3寄存器。如下表所示:
一、芯片中和CAN设备有关的寄存器如下:
1、辅助寄存器 2(AUXR2)
CANEN:CAN 总线使能控制位
0:关闭 CAN 功能
1:使能 CAN 功能
CAN2EN:CAN2 总线使能控制位
0:关闭 CAN2 功能
1:使能 CAN2 功能
CANSEL:CAN 总线选择
0:选择第一组 CAN
1:选择第二组 CAN
由于CAN1和CAN2的内部寄存器使用相同的地址。如果想区分访问的是CAN1的,还是CAN2的,就必须要使用CANSEL来指明。
2、CAN 总线中断控制寄存器(CANICR)
CANIE:CAN 总线中断使能控制位
0:关闭 CAN 中断
1:使能 CAN 中断
CANIF:CAN 总线中断请求标志位,需软件清零。
PCANH,PCANL:CAN 中断优先级控制位
CAN2IE:CAN2 总线中断使能控制位
0:关闭 CAN2 中断
1:使能 CAN2 中断
CAN2IF:CAN2 总线中断请求标志位,需软件清零。
PCAN2H,PCAN2L:CAN2 中断优先级控制位
3、CAN 总线地址寄存器(CANAR)
4、CAN 总线数据寄存器(CANDR)
对 CAN 内部功能寄存器进行读写均需要通过 CANAR 和 CANDR 进行间接访问
读 CAN 内部功能寄存器的方法:
a、将 CAN 内部功能寄存器的地址写入 CAN 总线地址寄存器 CANAR
b、读取 CAN 总线数据寄存器 CANDR
例如:需要读取 CAN 内部功能寄存器 ISR 的值
CANAR = 0x03; //将 ISR 的地址写入 CANAR
dat = CANDR; //读取 CANDR 以获得 ISR 的值
写 CAN 内部功能寄存器的方法:
a、将 CAN 内部功能寄存器的地址写入 CAN 总线地址寄存器 CANAR
b、将待写入的值写入 CAN 总线数据寄存器 CANDR
例如:需要将数据 0x5a 写入 CAN 内部功能寄存器 TXBUF0
CANAR = 0x08; //将 TXBUF0 的地址写入 CANAR
CANDR = 0x5a; //将待写入的值 0x5a 写入 CANDR