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

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

相关推荐
钟剑锋-JeffChong2 小时前
智能手表(Smart Watch)项目
stm32·单片机·嵌入式开发·智能手表
jmlinux2 小时前
环形缓冲区(Ring Buffer)在STM32 HAL库中的应用:防止按键丢失
c语言·stm32·单片机·嵌入式硬件
江山如画,佳人北望3 小时前
智能平衡移动机器人-平台硬件电路
单片机·嵌入式硬件
江将好...4 小时前
定时器实验(Proteus 与Keil uVision联合仿真)
单片机·嵌入式硬件
地球空间-技术小鱼4 小时前
嵌入式系统学习
嵌入式硬件·学习
物随心转4 小时前
中断系统的原理
单片机·嵌入式硬件
EVERSPIN15 小时前
分享国产32位单片机的电机控制方案
单片机·嵌入式硬件
每天一杯冰美式oh15 小时前
51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】
嵌入式硬件·51单片机·proteus
芯橦18 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
夜间去看海1 天前
基于单片机的智能浇花系统
单片机·嵌入式硬件·智能浇花