Skip to content

Commit 18b46d5

Browse files
fdcan transmit working
1 parent 6955296 commit 18b46d5

44 files changed

Lines changed: 7140 additions & 8169 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Core/App/FDCAN.c

Lines changed: 27 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -8,63 +8,45 @@
88
#include "FDCAN.h"
99

1010
extern FDCAN_HandleTypeDef hfdcan1;
11-
12-
fdcan_instance_t fdcan_instance = {};
13-
14-
fdcan_error_t const fdcan_start(void){
15-
fdcan_instance.hfdcan = &hfdcan1;
16-
fdcan_instance.rx_location = FDCAN_RX_FIFO0;
17-
18-
FDCAN_TxHeaderTypeDef* header = &fdcan_instance.tx_header;
19-
20-
header->FDFormat = FDCAN_FD_CAN;
21-
header->DataLength = FDCAN_DLC_BYTES_64;
22-
header->TxFrameType = FDCAN_DATA_FRAME;
23-
header->BitRateSwitch = FDCAN_BRS_ON;
24-
header->ErrorStateIndicator = FDCAN_ESI_PASSIVE;
25-
header->FDFormat = FDCAN_FRAME_FD_BRS;
26-
header->IdType = FDCAN_STANDARD_ID;
27-
header->TxEventFifoControl = FDCAN_NO_TX_EVENTS;
28-
header->MessageMarker = 0;
29-
header->Identifier = 0x0;
30-
31-
if(HAL_FDCAN_Start(fdcan_instance.hfdcan) != HAL_OK){
32-
return FDCAN_ERROR;
33-
}
34-
35-
if(HAL_FDCAN_ActivateNotification(fdcan_instance.hfdcan, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK){
36-
return FDCAN_ERROR;
37-
}
38-
39-
}
40-
41-
fdcan_error_t const fdcan_transmit(fdcan_packet_t* data){
42-
fdcan_instance.tx_header.Identifier = data->identifier;
43-
44-
if (HAL_FDCAN_AddMessageToTxFifoQ(fdcan_instance.hfdcan, &fdcan_instance.tx_header, data->data) != HAL_OK) {
11+
FDCAN_TxHeaderTypeDef tx_header;
12+
FDCAN_RxHeaderTypeDef rx_header_buffer;
13+
14+
fdcan_error_t const fdcan_transmit(fdcan_packet_t* packet){
15+
16+
tx_header.Identifier = (uint32_t)packet->identifier;
17+
tx_header.IdType = FDCAN_STANDARD_ID;
18+
tx_header.TxFrameType = FDCAN_DATA_FRAME;
19+
tx_header.DataLength = FDCAN_DLC_BYTES_64;
20+
tx_header.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
21+
tx_header.BitRateSwitch = FDCAN_BRS_ON;
22+
tx_header.FDFormat = FDCAN_FD_CAN;
23+
tx_header.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
24+
tx_header.MessageMarker = 0;
25+
26+
if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &tx_header, packet->data) != HAL_OK) {
4527
return FDCAN_ERROR;
4628
}
4729

4830
return FDCAN_OK;
4931
}
5032

51-
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs){
52-
33+
//void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs){
34+
// __NOP();
35+
//
36+
//}
5337

54-
}
38+
fdcan_error_t const fdcan_read(fdcan_packet_t* packet){
39+
// if(!fdcan_test) {
40+
// return FDCAN_EMPTY;
41+
// }
5542

56-
fdcan_error_t const fdcan_read(fdcan_packet_t* data){
57-
if(!fdcan_test) {
58-
return FDCAN_EMPTY;
59-
}
6043

61-
FDCAN_RxHeaderTypeDef header_buffer = {};
62-
HAL_FDCAN_GetRxMessage(fdcan_instance.hfdcan, fdcan_instance.rx_location, &header_buffer, data->data);
44+
HAL_FDCAN_GetRxMessage(&hfdcan1, FDCAN_RX_FIFO0, &rx_header_buffer, packet->data);
6345

64-
data->identifier = header_buffer.Identifier;
46+
packet->identifier = rx_header_buffer.Identifier;
6547
return FDCAN_OK;
6648
}
6749

6850
int const fdcan_test(void){
69-
return HAL_FDCAN_IsRxBufferMessageAvailable(fdcan_instance.hfdcan, fdcan_instance.rx_location);
51+
return HAL_FDCAN_IsRxBufferMessageAvailable(&hfdcan1, 0);
7052
}

Core/App/FDCAN.h

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,18 @@ typedef enum{
2626
}fdcan_error_t;
2727

2828
typedef struct {
29-
uint8_t data[64];
3029
uint16_t identifier;
30+
uint8_t* data;
3131

3232
}fdcan_packet_t;
3333

34-
typedef struct{
35-
FDCAN_HandleTypeDef* hfdcan;
36-
FDCAN_TxHeaderTypeDef tx_header;
37-
uint32_t rx_location;
38-
39-
}fdcan_instance_t;
4034
/****************************************************************************************
4135
* Function prototypes
4236
****************************************************************************************/
4337

44-
fdcan_error_t const fdcan_start(void);
45-
46-
fdcan_error_t const fdcan_transmit(fdcan_packet_t* data);
38+
fdcan_error_t const fdcan_transmit(fdcan_packet_t* packet);
4739

48-
fdcan_error_t const fdcan_read(fdcan_packet_t* data);
40+
fdcan_error_t const fdcan_read(fdcan_packet_t* packet);
4941

5042
int const fdcan_test(void);
5143

Core/Inc/main.h

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,24 @@ void Error_Handler(void);
5757
/* USER CODE END EFP */
5858

5959
/* Private defines -----------------------------------------------------------*/
60-
#define LED_CAN_Pin GPIO_PIN_4
61-
#define LED_CAN_GPIO_Port GPIOG
60+
#define MCO_Pin GPIO_PIN_0
61+
#define MCO_GPIO_Port GPIOH
62+
#define LED_SLEEP_Pin GPIO_PIN_4
63+
#define LED_SLEEP_GPIO_Port GPIOG
6264
#define LED_FLASH_Pin GPIO_PIN_5
6365
#define LED_FLASH_GPIO_Port GPIOG
64-
#define LED_CANG6_Pin GPIO_PIN_6
65-
#define LED_CANG6_GPIO_Port GPIOG
66+
#define LED_CAN_Pin GPIO_PIN_6
67+
#define LED_CAN_GPIO_Port GPIOG
6668
#define LED_FAULT_Pin GPIO_PIN_7
6769
#define LED_FAULT_GPIO_Port GPIOG
68-
#define LED_OP_Pin GPIO_PIN_8
69-
#define LED_OP_GPIO_Port GPIOG
70+
#define LED_OPERATIONAL_Pin GPIO_PIN_8
71+
#define LED_OPERATIONAL_GPIO_Port GPIOG
72+
#define SWDIO_Pin GPIO_PIN_13
73+
#define SWDIO_GPIO_Port GPIOA
74+
#define SWCLK_Pin GPIO_PIN_14
75+
#define SWCLK_GPIO_Port GPIOA
76+
#define SWO_Pin GPIO_PIN_3
77+
#define SWO_GPIO_Port GPIOB
7078
/* USER CODE BEGIN Private defines */
7179

7280
/* USER CODE END Private defines */

Core/Inc/stm32h7xx_hal_conf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@
165165
* @brief This is the HAL system configuration section
166166
*/
167167
#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */
168-
#define TICK_INT_PRIORITY (15UL) /*!< tick interrupt priority */
168+
#define TICK_INT_PRIORITY (0UL) /*!< tick interrupt priority */
169169
#define USE_RTOS 0
170170
#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */
171171
#define USE_SPI_CRC 0U /*!< use CRC in SPI */

Core/Inc/stm32h7xx_it.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,6 @@ void SVC_Handler(void);
5555
void DebugMon_Handler(void);
5656
void PendSV_Handler(void);
5757
void SysTick_Handler(void);
58-
void FDCAN1_IT0_IRQHandler(void);
59-
void FDCAN1_IT1_IRQHandler(void);
60-
void FDCAN_CAL_IRQHandler(void);
6158
/* USER CODE BEGIN EFP */
6259

6360
/* USER CODE END EFP */

Core/Src/main.c

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ static void MX_FDCAN1_Init(void);
5757

5858
/* Private user code ---------------------------------------------------------*/
5959
/* USER CODE BEGIN 0 */
60-
60+
//FDCAN_TxHeaderTypeDef TxHeader;
61+
//uint8_t TxData[64];
62+
//int indx = 0;
63+
uint8_t data[64];
6164
/* USER CODE END 0 */
6265

6366
/**
@@ -91,25 +94,37 @@ int main(void)
9194
MX_FDCAN1_Init();
9295
/* USER CODE BEGIN 2 */
9396
//bootloader_init();
94-
fdcan_start();
9597

96-
uint8_t data[64];
98+
9799
int i;
98100
uint8_t d = 0xA;
99101
for (i = 0; i < 64; ++i) {
100102
data[i] = d++;
101103
}
102104

103-
fdcan_packet_t p = {data, 69};
105+
fdcan_packet_t p = { 69, data};
106+
107+
108+
109+
HAL_FDCAN_Start(&hfdcan1);
110+
HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0);
104111

105112
/* USER CODE END 2 */
106113

107114
/* Infinite loop */
108115
/* USER CODE BEGIN WHILE */
109116
while (1)
110117
{
111-
fdcan_transmit(data);
112-
HAL_Delay(100);
118+
fdcan_transmit(&p);
119+
120+
// if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData)!= HAL_OK)
121+
// {
122+
// Error_Handler();
123+
// }
124+
//HAL_Delay(100);
125+
// int a = fdcan_test();
126+
127+
fdcan_read(&p);
113128
/* USER CODE END WHILE */
114129

115130
/* USER CODE BEGIN 3 */
@@ -150,7 +165,7 @@ void SystemClock_Config(void)
150165
RCC_OscInitStruct.PLL.PLLM = 2;
151166
RCC_OscInitStruct.PLL.PLLN = 44;
152167
RCC_OscInitStruct.PLL.PLLP = 1;
153-
RCC_OscInitStruct.PLL.PLLQ = 2;
168+
RCC_OscInitStruct.PLL.PLLQ = 4;
154169
RCC_OscInitStruct.PLL.PLLR = 2;
155170
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3;
156171
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
@@ -219,7 +234,7 @@ static void MX_FDCAN1_Init(void)
219234
hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_64;
220235
hfdcan1.Init.TxEventsNbr = 0;
221236
hfdcan1.Init.TxBuffersNbr = 0;
222-
hfdcan1.Init.TxFifoQueueElmtsNbr = 0;
237+
hfdcan1.Init.TxFifoQueueElmtsNbr = 16;
223238
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
224239
hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_64;
225240
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
@@ -246,16 +261,17 @@ static void MX_GPIO_Init(void)
246261
__HAL_RCC_GPIOH_CLK_ENABLE();
247262
__HAL_RCC_GPIOG_CLK_ENABLE();
248263
__HAL_RCC_GPIOA_CLK_ENABLE();
264+
__HAL_RCC_GPIOD_CLK_ENABLE();
249265
__HAL_RCC_GPIOB_CLK_ENABLE();
250266

251267
/*Configure GPIO pin Output Level */
252-
HAL_GPIO_WritePin(GPIOG, LED_CAN_Pin|LED_FLASH_Pin|LED_CANG6_Pin|LED_FAULT_Pin
253-
|LED_OP_Pin, GPIO_PIN_RESET);
268+
HAL_GPIO_WritePin(GPIOG, LED_SLEEP_Pin|LED_FLASH_Pin|LED_CAN_Pin|LED_FAULT_Pin
269+
|LED_OPERATIONAL_Pin, GPIO_PIN_RESET);
254270

255-
/*Configure GPIO pins : LED_CAN_Pin LED_FLASH_Pin LED_CANG6_Pin LED_FAULT_Pin
256-
LED_OP_Pin */
257-
GPIO_InitStruct.Pin = LED_CAN_Pin|LED_FLASH_Pin|LED_CANG6_Pin|LED_FAULT_Pin
258-
|LED_OP_Pin;
271+
/*Configure GPIO pins : LED_SLEEP_Pin LED_FLASH_Pin LED_CAN_Pin LED_FAULT_Pin
272+
LED_OPERATIONAL_Pin */
273+
GPIO_InitStruct.Pin = LED_SLEEP_Pin|LED_FLASH_Pin|LED_CAN_Pin|LED_FAULT_Pin
274+
|LED_OPERATIONAL_Pin;
259275
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
260276
GPIO_InitStruct.Pull = GPIO_NOPULL;
261277
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

Core/Src/stm32h7xx_hal_msp.c

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -111,25 +111,18 @@ void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan)
111111
/* Peripheral clock enable */
112112
__HAL_RCC_FDCAN_CLK_ENABLE();
113113

114-
__HAL_RCC_GPIOA_CLK_ENABLE();
114+
__HAL_RCC_GPIOD_CLK_ENABLE();
115115
/**FDCAN1 GPIO Configuration
116-
PA11 ------> FDCAN1_RX
117-
PA12 ------> FDCAN1_TX
116+
PD0 ------> FDCAN1_RX
117+
PD1 ------> FDCAN1_TX
118118
*/
119-
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
119+
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
120120
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
121121
GPIO_InitStruct.Pull = GPIO_NOPULL;
122-
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
122+
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
123123
GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1;
124-
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
125-
126-
/* FDCAN1 interrupt Init */
127-
HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0);
128-
HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn);
129-
HAL_NVIC_SetPriority(FDCAN1_IT1_IRQn, 0, 0);
130-
HAL_NVIC_EnableIRQ(FDCAN1_IT1_IRQn);
131-
HAL_NVIC_SetPriority(FDCAN_CAL_IRQn, 0, 0);
132-
HAL_NVIC_EnableIRQ(FDCAN_CAL_IRQn);
124+
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
125+
133126
/* USER CODE BEGIN FDCAN1_MspInit 1 */
134127

135128
/* USER CODE END FDCAN1_MspInit 1 */
@@ -154,15 +147,11 @@ void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan)
154147
__HAL_RCC_FDCAN_CLK_DISABLE();
155148

156149
/**FDCAN1 GPIO Configuration
157-
PA11 ------> FDCAN1_RX
158-
PA12 ------> FDCAN1_TX
150+
PD0 ------> FDCAN1_RX
151+
PD1 ------> FDCAN1_TX
159152
*/
160-
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
153+
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_0|GPIO_PIN_1);
161154

162-
/* FDCAN1 interrupt DeInit */
163-
HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn);
164-
HAL_NVIC_DisableIRQ(FDCAN1_IT1_IRQn);
165-
HAL_NVIC_DisableIRQ(FDCAN_CAL_IRQn);
166155
/* USER CODE BEGIN FDCAN1_MspDeInit 1 */
167156

168157
/* USER CODE END FDCAN1_MspDeInit 1 */

Core/Src/stm32h7xx_it.c

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
/* USER CODE END 0 */
5656

5757
/* External variables --------------------------------------------------------*/
58-
extern FDCAN_HandleTypeDef hfdcan1;
58+
5959
/* USER CODE BEGIN EV */
6060

6161
/* USER CODE END EV */
@@ -198,48 +198,6 @@ void SysTick_Handler(void)
198198
/* please refer to the startup file (startup_stm32h7xx.s). */
199199
/******************************************************************************/
200200

201-
/**
202-
* @brief This function handles FDCAN1 interrupt 0.
203-
*/
204-
void FDCAN1_IT0_IRQHandler(void)
205-
{
206-
/* USER CODE BEGIN FDCAN1_IT0_IRQn 0 */
207-
208-
/* USER CODE END FDCAN1_IT0_IRQn 0 */
209-
HAL_FDCAN_IRQHandler(&hfdcan1);
210-
/* USER CODE BEGIN FDCAN1_IT0_IRQn 1 */
211-
212-
/* USER CODE END FDCAN1_IT0_IRQn 1 */
213-
}
214-
215-
/**
216-
* @brief This function handles FDCAN1 interrupt 1.
217-
*/
218-
void FDCAN1_IT1_IRQHandler(void)
219-
{
220-
/* USER CODE BEGIN FDCAN1_IT1_IRQn 0 */
221-
222-
/* USER CODE END FDCAN1_IT1_IRQn 0 */
223-
HAL_FDCAN_IRQHandler(&hfdcan1);
224-
/* USER CODE BEGIN FDCAN1_IT1_IRQn 1 */
225-
226-
/* USER CODE END FDCAN1_IT1_IRQn 1 */
227-
}
228-
229-
/**
230-
* @brief This function handles FDCAN calibration unit interrupt.
231-
*/
232-
void FDCAN_CAL_IRQHandler(void)
233-
{
234-
/* USER CODE BEGIN FDCAN_CAL_IRQn 0 */
235-
236-
/* USER CODE END FDCAN_CAL_IRQn 0 */
237-
HAL_FDCAN_IRQHandler(&hfdcan1);
238-
/* USER CODE BEGIN FDCAN_CAL_IRQn 1 */
239-
240-
/* USER CODE END FDCAN_CAL_IRQn 1 */
241-
}
242-
243201
/* USER CODE BEGIN 1 */
244202

245203
/* USER CODE END 1 */

0 commit comments

Comments
 (0)