Hallo,
ich möchte Daten als PWM mit Timer 3 über DMA ausgeben. Dafür benutze
ich den Circular Buffer und möchte die beiden Interrupts "Half Transfer"
und "Full Transfer" verwenden. Der "Half Transfer" funktioniert schon
und wurde mit
1 | HAL_DMA_RegisterCallback(&hdma_tim3_ch1_trig, HAL_DMA_XFER_HALFCPLT_CB_ID, &cb1);
|
aktiviert. Das klappt wunderbar, das Gleiche funktioniert mit dem Full
Transfer aber nicht. Wenn man in die HAL Funktionen genauer sieht, wird
die Full Transfer callback Funktion in HAL_TIMEx_PWMN_Start_DMA ersetzt
durch TIM_DMADelayPulseCplt. Weiß jemand wo/wie man sich einhängen muss
um den auc Full Transfer zu bekommen?
Gruß
Werner
Die vollständige, von CubeMX, erzeugte main Funktion sieht wie folgt
aus:
1 | int main(void)
|
2 | {
|
3 | /* MCU Configuration--------------------------------------------------------*/
|
4 |
|
5 | /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
|
6 | HAL_Init();
|
7 |
|
8 | /* Configure the system clock */
|
9 | SystemClock_Config();
|
10 |
|
11 | /* Initialize all configured peripherals */
|
12 | MX_GPIO_Init();
|
13 | MX_DMA_Init();
|
14 | MX_TIM3_Init();
|
15 |
|
16 |
|
17 | HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
|
18 | HAL_DMA_RegisterCallback(&hdma_tim3_ch1_trig, HAL_DMA_XFER_HALFCPLT_CB_ID, &cb1);
|
19 | HAL_DMA_RegisterCallback(&hdma_tim3_ch1_trig, HAL_DMA_XFER_CPLT_CB_ID, &cb2);
|
20 | HAL_TIMEx_PWMN_Start_DMA(&htim3, TIM_CHANNEL_1, (uint32_t*) test, 128);
|
21 | while (1)
|
22 | {
|
23 |
|
24 | }
|
25 | }
|