使用工具
stm32f103c8t6最小系统板
cubeMx
keil V5
stm32f1xxHAL库
Cube配置
选择高速时钟晶振和serial wire debug,配置时钟树
使能led推挽输出引脚
打开串口1,使能串口中断
开启Tx和Rx的DMA
keil部分
定义发送数和接收变量
uint8_t Tx_str1[]="LED PIN CHANGED!\r\n";
uint8_t Tx_str2[]="1\r\n";
uint8_t Rx_dat=0;
2.串口DMA中断回调函数,如果接收到a回复str2,如果接收到b,翻转led电平并回复str1
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
//Rx_dat = huart->Instance->DR; // 获取接收到的数据
if(Rx_dat == 'a')
{
HAL_UART_Transmit_DMA(&huart1,Tx_str2,sizeof(Tx_str2));
}
else if(Rx_dat == 'b')
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
HAL_UART_Transmit_DMA(&huart1,Tx_str1,sizeof(Tx_str1));
}
}
}
3.在while中不断使能DMA接收中断
HAL_UART_Receive_DMA(&huart1,&Rx_dat,1);