1
votes

Edit: I solved UART communication problem but I have new problem getting pwm signal after receiving Transmit Data. I can blink led I can drive relay with transmitted data but I could not produce PWM signal.

maps(120, 1, 1, 250, RxData[4]); 
ADC_Left = Yx; __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,ADC_Left); 

I used __HAL_TIM_SET_COMPARE function but it doesnt work. I can observe ADC_Left’s value on Debug site but its not work.

I am trying to realize UART communication between 2 stm32. I know there are several topic related with but my question focused another one.

I am reading 2 adc value on stm32 which is only transmit these value and other one only receive these 2 adc value. To do this

MX_USART1_UART_Init();
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);  // Interrupt Enable
__HAL_UART_ENABLE_IT(&huart1, UART_IT_TC); 

char TxData1[10];
..............


TxData1[0] = 0xEA;
    TxData1[1] = wData.Byte_1;
    TxData1[2] = wData.Byte_2;
    TxData1[3] = wData.Byte_3;
    TxData1[4] = wData.Right_Adc_Val;
    TxData1[5] = wData.Left_Adc_Val;    
    TxData1[6] = wData.Byte_6;  

for(uint8_t i = 1 ; i < 7; i++)
    {
        wData.Checksum = wData.Checksum + TxData1[i];
    }
    wData.Checksum_H = (wData.Checksum >> 8)&0xFF;
    wData.Checksum_L = (wData.Checksum)&0xFF;

    TxData1[7] = wData.Checksum_H;
    TxData1[8] = wData.Checksum_L;
    TxData1[9] = 0xAE;

HAL_UART_Transmit_IT(&huart1,(uint8_t*) &TxData1,10);

............

This block sent them I can observate them on Debug screen and using TTL module's Tx Rx pins.

MX_USART1_UART_Init();
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);  // Interrupt Enable
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_TC); 


char RxData[10];



while(1){

HAL_UART_Receive_IT(&huart1,(uint8_t*) &RxData,10);
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)   
{

    if(huart->Instance == USART1)
    {



        HAL_UART_Receive_IT(&huart1,(uint8_t*) &RxData,10);

}

There is no problem up to here but when i getting RxData 0. index , it gives EA . Of course it should be give EA. When the adc data change all the ranking is changing. RxData[0] gives meaningless data. adc value is jumping over the all RxData array.

data locations must always be in the same index. How Can I get these data in stability for ex.

RxData[0]=EA . . RxData[4]= should give adc value. so on. ..

Edit: I tried other mode of UART, DMA (in circular mode) and direct mode were used. I cant receive even 1 byte with DMA .

1
"RxData 0. index , it gives EA ." "Of course it should be give EA" "RxData[0] gives meaningless data" I'm not following. Is0xEA in RxData[0] or no?skrrgwasme

1 Answers

1
votes

In your example code, you have an extra & that needs to be removed from both the transmit and receive HAL method calls. Example:

HAL_UART_Transmit_IT(&huart1,(uint8_t*) &TxData1,10);
HAL_UART_Transmit_IT(&huart1,(uint8_t*) TxData1,10);

To avoid this type of error in the future, recommend not using the cast and try something like the following:

uint8_t TxData1[10];
...
HAL_UART_Transmit_IT(&huart1, TxData1, sizeof(TxData1);