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

这篇具有很好参考价值的文章主要介绍了stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 单片机型号STM32F103R6:

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

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

时钟频率HSI 8MHZ;

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

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

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

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

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

这个是串口设置

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

stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX),stm32,proteus,嵌入式硬件 值得一提的是好像proteus里面那个终端的波特率最高只能值5.7万那个样子

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

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

 文章来源地址https://www.toymoban.com/news/detail-670649.html

//这个是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 */
}
//这个是修改后的函数   需要找到这个函数然后改成这个样子就可以了,建议使用搜索整个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);
}

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

 

到了这里,关于stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据

    之前讲过用 利用IDLE空闲中断来接收不定长数据 ,但是没有用到DMA,其实用DMA会更加的高效,MCU也可以腾出更多的性能去处理应该做的事情。 IDLE顾名思义,就是空闲的意思,即当监测到串口空闲超过1个串口的数据帧时,会使状态寄存器(SR或ISR)的IDLE位置位,如果此时控制

    2024年04月17日
    浏览(32)
  • STM32纯中断方式发送接收数据(串行通信;keil arm5;)

    除了main文件其他文件均无修改,正常运行--在keil arm5内

    2024年02月09日
    浏览(19)
  • 通过串口中断的方式进行ASR-01S模块与STM32通信(问题与解决)

    最近在做一个智能家居的项目,需要实现语音控制的功能,于是我选用了ASR-01S模块与STM32通信,这个模块最大的好处在于有配套的编程软件和语音库,不用自己训练且编程简单(少儿编程的程度)。ASR-01S的代码架构在这不多说,总之在收到语音后它会通过串口发送一串命令给

    2024年04月22日
    浏览(23)
  • STM32_串口中断接收数据_空闲中断

    引言: 1、串口中断接收数据首先要保证完整性(设置串口中断优先级) 2、串口中断接收数据要保证实时性(打开串口空闲中断——空闲时间是2个字节的时间) 3、串口中断接收+DMA缓存,等到需要处理时候在进行处理数据 方法一:直接利用stm32的RXNE和IDLE中断进行接收不定字

    2024年02月13日
    浏览(23)
  • STM32(HAL)串口中断接收

    目录 1、简介 2 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 串口外设配置  2.3 项目生成  3、KEIL端程序整合 本文对HAL串口中断函数进行介绍。 2.1.1 SYS配置  2.1.2 RCC配置 首先在main.c文件中进行接受变量声明。  接着在主函数的while循环中进行接收中断,如下所示:  最后在主函数

    2024年02月14日
    浏览(22)
  • STM32 HAL库 串口中断接收数据包

    目录 一、CUBEmx配置 1.设置系统时钟,配置SYS,配置时钟树  ​编辑  2.配置串口USART1 3.配置NVIC,开启串口中断 ​编辑4.点击GENERATE CODE输出文件即可 二、代码部分 0.串口重定向——printf 1.关于舵机 2.开启串口中断函数 3.编写串口回调函数 4.主函数部分 三、实验现象: 四、总

    2024年02月04日
    浏览(20)
  • 【STM32】HAL库 串口中断发送与接收

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 使用stm32串口中断发送和中断接收 在主函数前开启中断,接受字节数为5 接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回 修改接收数组长度,改为开启串口空闲中断 接收事件回调函数

    2024年02月08日
    浏览(18)
  • stm32_断点调试无法进入串口接收中断

    先说结果,可能是stm32调试功能/keil软件/调试器(试过STLINK和JLINK两种)的问题,不是代码; 配置完串口后,可以发送数据到串口助手,但不能接收数据并做处理,所以第一步,想确定有没有接收到单个字节进入中断。 开始打断点调试,发现串口数据寄存器DR能收到数据,串

    2024年02月08日
    浏览(23)
  • STM32用FreeRTOS串口中断接收卡死问题

    现在意法半导体的配套软件做得很全面了,简直可以说是保姆式的服务。从芯片选型,引脚定义,到代码模板生成,一条龙服务,很方便。但是方便也有方便的坏处,那就是有些细节的规则会造成天然的bug。 比如,在stm32cubeIDE里新建工程的时候,如果勾选了FREERTOS 那么,程序

    2024年02月15日
    浏览(19)
  • 【STM32】HAL库——串口中断只接收到两个字符

    环境:STM32CubeMX(6.7.0)+MDK-ARM(V5.36.0.0)+STM32F103C8T6 使用XCOM发送字符串(总共8个字符),单片机进行解析为ModBus协议失败,只接收到前两个字节的数据。 原串口中断回调函数: 去掉串口中断回调函数的printf函数即可 在嵌入式系统中,将printf函数直接放在串口中断服务程序(ISR)中

    2024年01月22日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包