之前在网上找了一个STM32F103C8T6关于can通信的例子,直接烧录,can不能使用, 使用示波器在VP230前后端查看没有波形, 先介绍板子硬件资源: HSE时钟:8MHz; MCU : STM32F103C8T6 CAN:一路; : e8 d$ o8 T& m. a9 J2 h$ d0 V
在软件的配置中找不到任何原因,使用USB-CAN分析仪不能识别波特率,怀疑是不是因为波特率设置不对,是不是硬件设计出现错误,查找手册 《stm32f103c8t6》
+ O- o' z7 k0 _$ M! \
1 V- l8 h( ?2 \: J
can的发送接收引脚是在PA11 PA12,(注意:can和其他的复用) 我找的那个程序,我把原理找到看了一下,can的发送接收是在 PB8 PB9,怀疑是我的板子硬件出错了, 我的板子硬件原理图上是PA11 PA12,是按照手册来设计的, 既然硬件没有问题,应该是软件问题,看看GPIO的配置: - /*CAN GPIO */+ h7 `4 I% A& S# e. h- y
- void CAN_GPIO_Config(void)0 ?' z3 k1 t8 q4 T' W7 ~0 k: U/ q
- {
, y* \' h3 ~( c l( s) o$ U - GPIO_InitTypeDef GPIO_InitStructure; 6 m j7 q+ o) u
- /* GPIOB */
( `+ g3 }2 y7 O% k" c! F3 p - RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE); # z/ }% E" y: S4 C9 z
- s$ j7 O8 I5 [, t
- /* CAN1 */
5 x+ D. v& s( B5 t6 ? - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); ; q" S* R' S; f
- 7 L; u$ p4 \4 X9 E
- /* Configure CAN pin: RX */ // PB8
5 N# @; `% ~) _ a" j5 L - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;7 z& o5 u2 o: o$ B( v
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 6 H/ ]: y( b- d S% Z
- GPIO_Init(GPIOB, &GPIO_InitStructure);
: O8 r/ b2 V8 a% D: ~. o- ~ -
F6 h% M# r* v' b+ a& [ - /* Configure CAN pin: TX */ // PB9
" E* m* G) c. \, B5 p - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;# O6 {+ _: S2 v9 L
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + Y# L$ _! I* e9 J
- GPIO_Init(GPIOB, &GPIO_InitStructure);
* Y- M/ `. M0 d3 c+ l- m8 Y - - ?2 |8 Z1 S& Q5 v& [
- //#define GPIO_Remap_CAN GPIO_Remap1_CAN1 5 D" t& b Y# A3 }% e- s
- GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
- z, S# t2 |7 d3 M9 P -
/ H$ _7 R! U# \8 K+ P! s - }
复制代码
4 T* O; w3 L8 F- D9 h+ Q
明白了,原来是把can的发送接收端口映射到了PB8、9上面了, 修改后的代码: - void CAN_GPIO_Config(void)
8 @/ t; F% A F/ o5 Z. [- j - {
3 w# o' d8 o0 v% {( D' L, _ - GPIO_InitTypeDef GPIO_InitStructure;
; {( W/ [, [9 J - /* GPIOA */ * j1 X6 S4 N# w5 p% U
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
* M* ]1 g, Q; Q/ v" [5 {
8 w9 ]/ f/ z# L4 R& ?9 g- /* CAN1 */
: ]1 \( ~6 ?/ d0 c* U0 |1 n6 U - RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 1 K* z5 y' G6 w$ z2 K' D, i( t
- ; F( `# ~+ ^8 O+ |
- /* Configure CAN pin: RX */ // PA11" R+ x( q4 m- \$ h
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;7 R- J2 C s W7 y8 ~) W
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 0 ]2 M+ O0 o) a' `6 |2 I
- GPIO_Init(GPIOA, &GPIO_InitStructure);: Z' N4 ^% N2 ~4 ~! y. w% q7 v
- 4 c" z1 J }: S1 D' B$ | U( G, Z' n( G
- /* Configure CAN pin: TX */ // PA12
/ {( Q% n/ a' H) m* J* q$ N - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
( L/ G7 `( N) e% {. f - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; ! s5 [( a4 j9 _7 Q* F' i
- GPIO_Init(GPIOA, &GPIO_InitStructure);* Z- X I' r7 h. _1 d* V
-
# j, H c$ N/ P, n# }2 P _2 c - //#define GPIO_Remap_CAN GPIO_Remap1_CAN1
# D7 X# R) M4 ?% {) | - //GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE); //取消端口映射 craigtao 2014-4-4
2 B* C I# H; `7 } - , z" v9 q4 C' p6 A9 a# C3 @
- }
复制代码
5 n& }4 W" d3 G" L( P& U% B转载自:仆人 : d0 @" H/ J/ Z. C* i! c
|