STMCU小助手
发布时间:2023-3-7 14:00
|
1、默认STM32CAN1就是主站。CAN2是从站 2、主站配置如下:参考时钟是72M/2=36M) \2 r# T# w; V# q. z 波特率:36M/9/(2+2+1)=800K.所以通讯频率800K。3 n1 u5 g) _6 B% w 注意此处BUS-Off一定要enable。否则出现插上下载器两个站就不能同时发送的情况' s @3 J u6 p) k
) Z( I3 R0 }) O 3、中断设置
6 V) f V$ E: u) J 4、can开启函数: c7 \, w1 E3 ~6 b4 g. f3 a$ Q HAL_CAN_Start(&hcan1);8 X8 N2 B! x2 o8 f T4 g6 p HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING);8 a1 F: l) r: I6 G) z1 e can发送函数:: v6 Z# q; P2 Q; d5 n& ^$ j/ e* W void CAN_TRANSMIT1(void) {/ c5 Z5 Z( U( l: A TxMessage2.DLC=8;/ [3 q4 m# H9 l* x1 p TxMessage2.StdId=0x314;" i! `. N% J$ G2 s7 j; U TxMessage2.ExtId=0x00001314;/ E! ?+ g8 m! `5 g6 z5 F TxMessage2.IDE=CAN_ID_EXT; TxMessage2.RTR=CAN_RTR_DATA; uint8_t TR_BUF[8]=“22222222”;2 @" `! A I9 F( {, l) j8 v$ a if(HAL_CAN_AddTxMessage(&hcan1,&TxMessage2,TR_BUF,(uint32_t*)CAN_TX_MAILBOX1)!=HAL_OK) { printf("???1");" @& W C- ]# q! K; E' _& a, c } }3 H) Z4 r) ?" }% y 5、can1配置 static void MX_CAN1_Init(void)& R* \* \: ]3 x { 7 K( l4 W1 d- {2 D /* USER CODE BEGIN CAN1_Init 0 / CAN_FilterTypeDef sFilterConfig; / USER CODE END CAN1_Init 0 */ /* USER CODE BEGIN CAN1_Init 1 */4 s& x- |! g! X3 \- p 1 S, u( g6 Q6 m6 ^; G /* USER CODE END CAN1_Init 1 /2 P& H) Z9 q- `2 G- f0 s hcan1.Instance = CAN1; hcan1.Init.Prescaler = 18; hcan1.Init.Mode = CAN_MODE_NORMAL;$ G; a) d/ X" ~2 I hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan1.Init.TimeSeg1 = CAN_BS1_2TQ; hcan1.Init.TimeSeg2 = CAN_BS2_1TQ; hcan1.Init.TimeTriggeredMode = DISABLE; hcan1.Init.AutoBusOff = ENABLE;, w/ I/ v) b- b hcan1.Init.AutoWakeUp = DISABLE; hcan1.Init.AutoRetransmission = DISABLE;; g. l4 s8 c1 T- Y hcan1.Init.ReceiveFifoLocked = DISABLE;7 Z0 N' M- D) w; _( f2 k, k hcan1.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan1) != HAL_OK) { Error_Handler();# `$ X) d5 e7 e } / USER CODE BEGIN CAN1_Init 2 */$ G# q# M5 z1 I5 `& o sFilterConfig.FilterBank = 0;9 L5 ?! u/ Q! ?- _& c sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; sFilterConfig.FilterIdHigh = 0x0000; sFilterConfig.FilterIdLow = 0x0000;( h9 J5 f( l; b9 P; n7 x sFilterConfig.FilterMaskIdHigh = 0x0000;: N: O3 z" P$ h sFilterConfig.FilterMaskIdLow = 0x0000;5 F5 O, z5 i& U) _: ]1 B sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;$ P1 F8 B0 U3 x$ l9 q# V sFilterConfig.FilterActivation = ENABLE; sFilterConfig.SlaveStartFilterBank = 14; 5 C* ]# j+ Y* D6 x if(HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig)!=HAL_OK)1 _9 H/ j) V' f \ {' Q& y; z2 \' Q- O2 R( u# ~ Error_Handler(); } 2 l! q8 j; v q: I' s8 [# S . H" O/ B) H, \6 N1 K /* USER CODE END CAN1_Init 2 */ ! Z! j& C) ]2 }% f4 r }" H/ q8 t8 _7 d6 d+ ?/ K/ c! _ , U% c# k l3 V- g: s6 Z/ H" V 6、CAN1中断函数! f( s2 E! F) V! y Z + Y% |3 s4 P: r/ m- \" j8 x( O, n ) ?1 k- n+ i# Y; X9 L void CAN1_RX0_IRQHandler(void) {+ P2 R2 `+ x1 l0 ` /* USER CODE BEGIN CAN1_RX0_IRQn 0 */ 4 \6 {. N$ R7 [ - O/ A$ F* O& H5 Q! M$ s# G# U HAL_CAN_GetRxMessage(&hcan1,CAN_RX_FIFO0,&RxMessage1,RXBUF); /* USER CODE END CAN1_RX0_IRQn 0 /+ S: V5 G2 q' a HAL_CAN_IRQHandler(&hcan1);! C( g# w: r; ~* i / USER CODE BEGIN CAN1_RX0_IRQn 1 */7 q$ v5 z, I' h C- K' R /* USER CODE END CAN1_RX0_IRQn 1 */ } ' z( H/ a+ l6 {# b1 ~* h1 @8 J $ S/ g c; d3 o8 j" M( p6 ^0 F: S 7、CAN2配置 static void MX_CAN2_Init(void) { ; ?3 j, x3 o( `. x /* USER CODE BEGIN CAN2_Init 0 /" I% A% @* y; x8 M' ^- W CAN_FilterTypeDef sFilterConfig;4 Q' a5 q5 Y& `5 t. O9 ~ / USER CODE END CAN2_Init 0 */ # E3 x5 U6 t4 W4 V5 \( P /* USER CODE BEGIN CAN2_Init 1 */" R% q; C" q$ b! z- Q ( a! D7 F3 V: T8 R9 i/ X /* USER CODE END CAN2_Init 1 / hcan2.Instance = CAN2; hcan2.Init.Prescaler = 18; hcan2.Init.Mode = CAN_MODE_NORMAL;4 h/ W. `) Q4 ?3 L1 k6 O hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan2.Init.TimeSeg1 = CAN_BS1_2TQ; hcan2.Init.TimeSeg2 = CAN_BS2_1TQ;( U' _) e! @/ p2 X# y0 ~$ } hcan2.Init.TimeTriggeredMode = DISABLE; hcan2.Init.AutoBusOff = ENABLE; hcan2.Init.AutoWakeUp = DISABLE; hcan2.Init.AutoRetransmission = DISABLE;1 t/ W+ x5 C! j1 H: O hcan2.Init.ReceiveFifoLocked = DISABLE; hcan2.Init.TransmitFifoPriority = DISABLE;( l- E% t7 e% O2 j. I if (HAL_CAN_Init(&hcan2) != HAL_OK) {! x8 t% b t; U; W% i Error_Handler(); j- z4 v- i+ H } / USER CODE BEGIN CAN2_Init 2 *// H% {. U+ {1 [4 l0 b4 ]+ `6 f 9 e7 E/ P, W2 E; x. p# \5 _ sFilterConfig.FilterBank = 14; sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;0 `! I5 O1 O% [3 f sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;: |7 g4 l) r3 S: I sFilterConfig.FilterIdHigh = 0x0000; sFilterConfig.FilterIdLow = 0x0000;& K- o2 x8 r9 W: o+ U sFilterConfig.FilterMaskIdHigh = 0x0000; sFilterConfig.FilterMaskIdLow = 0x0000;0 h0 l# T& p: D sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;4 o& e s" K' d& A g1 k sFilterConfig.FilterActivation = ENABLE; sFilterConfig.SlaveStartFilterBank = 14;3 d- z/ d) `; x% \7 V! r if(HAL_CAN_ConfigFilter(&hcan2, &sFilterConfig)!=HAL_OK)/ g- e# B7 i% O# l/ C! O { Error_Handler(); } HAL_CAN_Start(&hcan2); HAL_CAN_ActivateNotification(&hcan2,CAN_IT_RX_FIFO0_MSG_PENDING); /* USER CODE END CAN2_Init 2 */ , ~1 V$ c: K( h6 u( W }$ [) J3 R4 m# J/ Y. }+ T4 q 8、CAN2中断函数1 V4 \6 O* N" V void CAN2_RX0_IRQHandler(void) { /* USER CODE BEGIN CAN2_RX0_IRQn 0 /* H5 }( U. m8 E HAL_CAN_GetRxMessage(&hcan2,CAN_RX_FIFO0,&RxMessage1,RXBUF); / USER CODE END CAN2_RX0_IRQn 0 / HAL_CAN_IRQHandler(&hcan2);, V6 `4 q( E0 o / USER CODE BEGIN CAN2_RX0_IRQn 1 */! \& A; x4 j( `) i M g/ s z( N0 Y0 b6 P /* USER CODE END CAN2_RX0_IRQn 1 */ } ; i- I2 A1 F7 V y" M 9、CAN2发送函数+ X+ @( g1 w# h6 K void CAN_TRANSMIT1(void)4 [. @6 M3 P7 _ {4 j+ e; L8 |/ I# G static uint8_t ll;0 K& U) u& @& E# j, y8 D TxMessage2.DLC=8;4 i( e' ?! Y. N5 p! o TxMessage2.StdId=0x003;& J$ J6 B6 ]3 Q4 W" U4 X- i TxMessage2.ExtId=0x00000003;5 b9 \0 W( t/ g6 s TxMessage2.IDE=CAN_ID_EXT;6 V3 a% r9 c I/ \$ c' o; [; I. z TxMessage2.RTR=CAN_RTR_DATA;, ~$ x& W: a3 A9 K' k' T! i$ N ll++;' f/ M! q7 K; r& M3 c4 j; m/ k, F% _ if(ll>100) {ll=0;} uint8_t TR_BUF[8]={0,1,2,3,4,5,6,ll};6 @# ^1 ~4 p# v' H if(HAL_CAN_AddTxMessage(&hcan2,&TxMessage2,TR_BUF,6 H+ |5 C/ a3 {1 V! X$ i (uint32_t*)CAN_TX_MAILBOX1)!=HAL_OK)9 i* h: j/ k5 W5 t i { // }% P0 G' c C) u+ A } ————————————————$ l; L3 \$ X5 G r1 d; X 版权声明:冬麻麻& `; C) e( v- l" C8 { , l- J( l4 G9 h |
【STM32H5 评测】ADC 电压表
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】NUCLEO-H5E5ZJ 使用 TrustZone 安全分区系统实践测试
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【STM32H5 评测】介绍、环境搭建、工程测试
#双节活动 1.在CubeMX中引用touchGFX出现的问题与解决
如何将STM32CubeMX生成的CMake工程导入STM32CubeIDE
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
微信公众号
手机版