你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103C8T6 can端口映射

[复制链接]
STMCU小助手 发布时间:2023-1-7 11:58
之前在网上找了一个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! \
041504427039166.jpg
1 V- l8 h( ?2 \: J
can的发送接收引脚是在PA11 PA12,(注意:can和其他的复用)
我找的那个程序,我把原理找到看了一下,can的发送接收是在 PB8 PB9,怀疑是我的板子硬件出错了,
我的板子硬件原理图上是PA11 PA12,是按照手册来设计的,
既然硬件没有问题,应该是软件问题,看看GPIO的配置:
  1. /*CAN GPIO  */+ h7 `4 I% A& S# e. h- y
  2. void CAN_GPIO_Config(void)0 ?' z3 k1 t8 q4 T' W7 ~0 k: U/ q
  3. {
    , y* \' h3 ~( c  l( s) o$ U
  4.   GPIO_InitTypeDef GPIO_InitStructure; 6 m  j7 q+ o) u
  5.   /* GPIOB */     
    ( `+ g3 }2 y7 O% k" c! F3 p
  6.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);                                                                         # z/ }% E" y: S4 C9 z
  7.   s$ j7 O8 I5 [, t
  8.   /* CAN1  */
    5 x+ D. v& s( B5 t6 ?
  9.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); ; q" S* R' S; f
  10. 7 L; u$ p4 \4 X9 E
  11.   /* Configure CAN pin: RX */     // PB8
    5 N# @; `% ~) _  a" j5 L
  12.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;7 z& o5 u2 o: o$ B( v
  13.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     // 6 H/ ]: y( b- d  S% Z
  14.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    : O8 r/ b2 V8 a% D: ~. o- ~
  15.   
      F6 h% M# r* v' b+ a& [
  16.   /* Configure CAN pin: TX */   // PB9
    " E* m* G) c. \, B5 p
  17.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;# O6 {+ _: S2 v9 L
  18.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + Y# L$ _! I* e9 J
  19.   GPIO_Init(GPIOB, &GPIO_InitStructure);
    * Y- M/ `. M0 d3 c+ l- m8 Y
  20.   - ?2 |8 Z1 S& Q5 v& [
  21.     //#define GPIO_Remap_CAN    GPIO_Remap1_CAN1 5 D" t& b  Y# A3 }% e- s
  22.   GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);   
    - z, S# t2 |7 d3 M9 P
  23.   
    / H$ _7 R! U# \8 K+ P! s
  24. }
复制代码

4 T* O; w3 L8 F- D9 h+ Q
明白了,原来是把can的发送接收端口映射到了PB8、9上面了,
修改后的代码:
  1. void CAN_GPIO_Config(void)
    8 @/ t; F% A  F/ o5 Z. [- j
  2. {
    3 w# o' d8 o0 v% {( D' L, _
  3.   GPIO_InitTypeDef GPIO_InitStructure;
    ; {( W/ [, [9 J
  4.   /* GPIOA */     * j1 X6 S4 N# w5 p% U
  5.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);                                                                        
    * M* ]1 g, Q; Q/ v" [5 {

  6. 8 w9 ]/ f/ z# L4 R& ?9 g
  7.   /* CAN1  */
    : ]1 \( ~6 ?/ d0 c* U0 |1 n6 U
  8.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 1 K* z5 y' G6 w$ z2 K' D, i( t
  9. ; F( `# ~+ ^8 O+ |
  10.   /* Configure CAN pin: RX */     // PA11" R+ x( q4 m- \$ h
  11.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;7 R- J2 C  s  W7 y8 ~) W
  12.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;     // 0 ]2 M+ O0 o) a' `6 |2 I
  13.   GPIO_Init(GPIOA, &GPIO_InitStructure);: Z' N4 ^% N2 ~4 ~! y. w% q7 v
  14.   4 c" z1 J  }: S1 D' B$ |  U( G, Z' n( G
  15.   /* Configure CAN pin: TX */   // PA12
    / {( Q% n/ a' H) m* J* q$ N
  16.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    ( L/ G7 `( N) e% {. f
  17.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; ! s5 [( a4 j9 _7 Q* F' i
  18.   GPIO_Init(GPIOA, &GPIO_InitStructure);* Z- X  I' r7 h. _1 d* V
  19.   
    # j, H  c$ N/ P, n# }2 P  _2 c
  20.   //#define GPIO_Remap_CAN    GPIO_Remap1_CAN1
    # D7 X# R) M4 ?% {) |
  21.   //GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);     //取消端口映射   craigtao 2014-4-4
    2 B* C  I# H; `7 }
  22.   , z" v9 q4 C' p6 A9 a# C3 @
  23. }
复制代码

5 n& }4 W" d3 G" L( P& U% B
转载自:仆人
: d0 @" H/ J/ Z. C* i! c
赞 收藏 评论0 发布时间:2023-1-7 11:58

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版