stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)

单片机型号STM32F103R6:

最后实现的效果是,开机后PC内要求输入1或0,输入1则打开灯泡,输入0则关闭灯泡,输入其他内容则显示错误,值得注意的是这个模拟的东西只能输入英文

之所以用2个LED灯是因为LED电阻粗略一算就是100欧姆,所以懒得再去画其他的东西,真是天助我也

时钟频率HSI 8MHZ;

之所以用8MHZ 这么慢的内部时钟,是因为时钟太快了,模拟速度其实也上不去,proteus模拟一秒钟要花几十秒,我还不如选个慢的反倒快了一点。真的是欲速则不达

选择PB1作为输出引脚具体设置看图片。选择了推挽输出,初始化输出高电平,接了上拉电阻。

这个是串口设置

值得一提的是好像proteus里面那个终端的波特率最高只能值5.7万那个样子

所以我把波特率设置为了56000.proteus里面的虚拟PC同样也要这样设置,而且单片机频率最好也设置为8MHZ.

cpp 复制代码
//这个是main函数
int main(void)
{
//	uint8_t txtbuff[]="please input num1 or 2 \n\r 1 turn on the light\n\r  2 turn off the light";
	uint8_t txtbuff[]="please input num 1 or 2\n\r";
	uint8_t txtbuff1[]="1 turn on the light\n\r";
	uint8_t txtbuff2[]="2 turn off the light\n\r";


  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */
	HAL_UART_Transmit(&huart1,txtbuff,sizeof(txtbuff),1000);	
	HAL_UART_Transmit(&huart1,txtbuff1,sizeof(txtbuff1),1000);
	HAL_UART_Transmit(&huart1,txtbuff2,sizeof(txtbuff2),1000);
	
	HAL_UART_Receive_IT(&huart1,(uint8_t*)&aRxBuffer,1);
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
cpp 复制代码
//这个是修改后的函数   需要找到这个函数然后改成这个样子就可以了,建议使用搜索整个project
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
	uint8_t a[]="light on\n\r";
	uint8_t b[]="light off\n\r";
	uint8_t c[]="error badness\n\r";
	extern uint8_t aRxBuffer;
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
	if(aRxBuffer=='0')
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
		HAL_UART_Transmit(&huart1,b,sizeof(b),1000);	
	}
	else if(aRxBuffer=='1')
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
		HAL_UART_Transmit(&huart1,a,sizeof(a),1000);	
	}
	else
	{
		HAL_UART_Transmit(&huart1,c,sizeof(c),1000);	
	}
  /* USER CODE END USART1_IRQn 1 */
	HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
}

其他的地方都没有修改全都保持默认就可以了

相关推荐
陌夏微秋1 小时前
51单片机基础02 动态数码管显示-并串转换
arm开发·单片机·嵌入式硬件·51单片机·硬件工程·信息与通信·信号处理
面包板扎1 小时前
51单片机应用开发---LCD1602显示应用
单片机·嵌入式硬件·51单片机
好想有猫猫2 小时前
【51单片机】LCD1602液晶显示屏
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
陌夏微秋2 小时前
51单片机基础01 单片机最小系统
单片机·嵌入式硬件·51单片机·硬件工程·信息与通信
追梦少年时10 小时前
STM32-Flash闪存
stm32·单片机·嵌入式硬件·51单片机
weixin_4526006911 小时前
《青牛科技 GC6125:驱动芯片中的璀璨之星,点亮 IPcamera 和云台控制(替代 BU24025/ROHM)》
人工智能·科技·单片机·嵌入式硬件·新能源充电桩·智能充电枪
weixin_4526006912 小时前
【青牛科技】14W 高保真音频放大电路——D2030
科技·单片机·嵌入式硬件·音视频·电动工具·智能电表
小刘同学-很乖19 小时前
MQTT从入门到精通之MQTT Dashboard
spring boot·stm32·物联网·iot
YuCaiH20 小时前
【STM32】USART串口数据包
笔记·stm32·单片机·嵌入式硬件
Kasen's experience1 天前
STM32 GPIO 配置
stm32·单片机·嵌入式硬件