如何在 2 个 Stm32 之间建立 UART 通信并产生 PWM 信号

How Can I Establish UART Communication between 2 Stm32 and produce PWM signal

编辑:我解决了 UART 通信问题,但我在接收传输数据后获取 pwm 信号时遇到新问题。我可以闪烁 LED 我可以用传输的数据驱动继电器,但我无法产生 PWM 信号。

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

我使用了 __HAL_TIM_SET_COMPARE 功能,但它不起作用。我可以在调试站点上观察到 ADC_Left 的值,但它不起作用。

我正在尝试实现2个stm32之间的UART通信。我知道有几个相关的话题,但我的问题集中在另一个话题上。

我在 stm32 上读取 2 个 adc 值,它只传输这些值,另一个只接收这 2 个 adc 值。为此

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);

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

这个块发送了它们,我可以在调试屏幕上观察它们并使用 TTL 模块的 Tx Rx 引脚。

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);

}

到这里没有问题,但是当我得到 RxData 0.index 时,它给出了 EA 。当然应该给EA。当 adc 数据改变时,所有排名都在改变。 RxData[0] 给出无意义的数据。 adc 值正在跳过所有 RxData 数组。

数据位置必须始终位于同一索引中。我怎样才能稳定地获得这些数据。

RxData[0]=EA . . RxData[4]= 应该给出 adc 值。很快。 ..

编辑:我尝试了UART的其他模式,使用了DMA(循环模式)和直接模式。我什至无法通过 DMA 接收 1 个字节。

在您的示例代码中,您有一个额外的 & 需要从传输和接收 HAL 方法调用中删除。示例:

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

为避免将来出现此类错误,建议不要使用强制转换并尝试以下操作:

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