当前位置: 首页 > news >正文

山西网站制作公司怎样通过阿里云建设网站

山西网站制作公司,怎样通过阿里云建设网站,自建网站教程,深圳 建设银行国际互联网站USART串口通讯 一、轮询模式 1.设置所接引脚为UART异步模式 选择完成CTRLS保存。 2.编写测试代码#xff08;自动发送hello world#xff09; 在mian函数里面编写代码 原函数 调用函数#xff0c;需要数据类型一致#xff0c;使用函数通过串口发送数组里面的数据 打开串…USART串口通讯 一、轮询模式 1.设置所接引脚为UART异步模式 选择完成CTRLS保存。 2.编写测试代码自动发送hello world 在mian函数里面编写代码 原函数 调用函数需要数据类型一致使用函数通过串口发送数组里面的数据 打开串口助手测试选择对应的端口波特率需要一致。 3.编写接收数据的代码 通过串口助手测试代码正常使用。 二、中断模式收发 1.打开URAT的中断功能然后保存自动生成代码 2.使用中断发送数据 3.使用中断接收数据 串口使用中断模式来接收信息没有等待时间如果程序写在while循环中会有这次数据还没有接收完成就去接收下次数据的情况所以需要将对应程序写在中断函数的回调函数中。在stm32f1xx_hal_uart.c文件中有一个回调函数我们可以重新定义其内容 将定义的数组改成全局变量 /* USER CODE BEGIN PV */ uint8_t receiveData[2]; /* USER CODE END PV */复制回调函数到main.c文件中重新定义回调函数 /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {HAL_UART_Transmit_IT(huart1, receiveData, 2);GPIO_PinState state GPIO_PIN_SET; if (receiveData[1] 1) {state GPIO_PIN_RESET;if (receiveData[0] L) {HAL_GPIO_WritePin(GPIOB, LED_MCU_Pin, state);}}if (receiveData[1] 0) {state GPIO_PIN_SET;if (receiveData[0] L) {HAL_GPIO_WritePin(GPIOB, LED_MCU_Pin, state);}}HAL_UART_Receive_IT(huart1, receiveData, 2); //每次执行完回调函数内容后要继续为下次接收开启串口接收数据 } /* USER CODE END 0 */3.串口使用DMA模式接收发送数据 无论用上面哪种方式询问或者中断都会占用CPU所以可以使用DMA来搬运数据等搬运完成触发中断就可以去处理。减少了对CPU的占用率。 开启DMA功能。 将串口中断函数改成DMA函数修改其后缀即可其他不变。 下载调试发现程序正常正常接收发送数据。 4.串口接收不定长数据 我们可以认为空闲ldle中断发生时就是一帧数据包接收完成了此时再对数据进行分析处理即可。 HAL_UARTEx_ReceiveToIdle_DMA(huart1, receiveData, sizeof(receiveData));/* 接收空闲中断接收长度是最大长度。而不是接收数据的长度。可以设置为数组的长度。而数组的长度要尽量大。不至于溢出 */HAL_UARTEx_ReceiveToIdle_DMA对应的回调函数不是之前RxCpltCallback回调函数了而是RxEventCallback这个回调函数了。 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {if (huart huart1) { //判断触发的中断是哪个中断HAL_UART_Transmit_DMA(huart, receiveData, Size); //将接收的数据发送回去HAL_UARTEx_ReceiveToIdle_DMA(huart1, receiveData, sizeof(receiveData)); //重新启动接收函数} }下载代码连接电脑发送数据单片机可以正常接收到数据并且执行RxEventCallback()函数而不是执行RxCpltCallback()这个回调函数。上面虽然实现了功能但是当接收数据达到接收数组的一半时也会有产生中断使得一半之后的数据接收不到所以需要在接收数据之后将接收过半中断给关闭了 HAL_UARTEx_ReceiveToIdle_DMA(huart1, receiveData, sizeof(receiveData));/* 接收空闲中断接收长度是最大长度。而不是接收数据的长度。可以设置为数组的长度。而数组的长度要尽量大。不至于溢出 */__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT);5.蓝牙透传模块BT24 BT24蓝牙透传模块可以通过串口收发数据BT24蓝牙模块默认波特率为9600所以需要将波特率设置为9600手机可以下载DX-SMART这个APP连接蓝牙模块并且进行数据的收发。 添加DMA通道在 USART1 - Configuration - DMA Settings 标签卡中点击 Add 按钮分别添加 USART3_RX 和 USART3_TX 的 DMA 通道 使能串口中断在 USART1 - Configuration - NVIC Settings 标签卡中勾选 USART1 global interrupt 的 Enable 代码部分 定义全局变量 receiveData 作为串口接收数组由于是不定长数据的接收因此缓冲区大小可以根据实际需求调整只能大不能小否则可能会丢失数据。 /* USER CODE BEGIN PV */ uint8_t receiveData[50]; /* USER CODE END PV */在 main 函数中使用 HAL_UARTEx_ReceiveToIdle_DMA 函数开启不定长数据DMA接收注意需要关闭DMA传输过半中断我们只需要接收完成中断此函数是以空闲中断作为接收完成的标志而不是接收长度因此可以接收任意长度的数据。 /* USER CODE BEGIN 2 */HAL_UARTEx_ReceiveToIdle_DMA(huart1, receiveData, sizeof(receiveData)); //通过DMA将数据接收并存到receiveData数组中__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT); //关闭DMA传输过半中断只需要接收完成中断。/* USER CODE END 2 */在中断函数 HAL_UARTEx_RxEventCallback 中处理接收到的数据所有的串口接收和发送操作都在中断函数中进行不会阻塞主程序。下面代码功能是接收到数据之后确人是蓝牙所连接口接收到的之后发送回去并对数据进行解析从而控制LED灯的亮或者灭。数据包含了包头数据长度功能数据校验和。包含由自己决定下面例子包头是0xAA第二位是长度接着是控制LED的亮灭0x00表示输出低电平0x01表示输出高电平之后是控制的哪个LED0x01表示第一个LED0x02表示第二个LED0x03表示第三个LED最后是前面所有数据的总和来当作一个验证方式。 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {if (huart huart1) {HAL_UART_Transmit_DMA(huart1, receiveData, Size);if (receiveData[0] 0xAA) {if (receiveData[1] Size) {uint8_t sum 0;for (uint8_t i 0; i Size - 1; i) {sum sum receiveData[i];}if (sum receiveData[Size - 1]) {for (uint8_t i 2; i Size - 1; i 2) {GPIO_PinState state GPIO_PIN_SET;if (receiveData[i 1] 0x00) {state GPIO_PIN_RESET;} else {state GPIO_PIN_SET;}if (receiveData[i] 0x01) {HAL_GPIO_WritePin(GPIOA, LED1_Pin, state);} else if (receiveData[i] 0x02) {HAL_GPIO_WritePin(GPIOA, LED2_Pin, state);} else if (receiveData[i] 0x03) {HAL_GPIO_WritePin(GPIOA, LED3_Pin, state);}}}}}HAL_UARTEx_ReceiveToIdle_DMA(huart1, receiveData, sizeof(receiveData));__HAL_DMA_DISABLE_IT(hdma_usart1_rx, DMA_IT_HT);} }手机通过蓝牙将数据发送到BT24模块单片机通过串口连接蓝牙模块可以接收数据。 打开手机APP连接好蓝牙模块之后发送0xAA, 0x09, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0xBC单片机接收到之后发送回来手机也会接收到这个数据并且将LED1,LED2,LED3三个LED灯全部点亮确认代码无误。
http://www.dnsts.com.cn/news/129497.html

相关文章:

  • 一级a做爰片免费网站瑜伽微商货源类网站源码
  • 硬盘做免费嗳暧视频网站镇江久一信息科技
  • 跟我学做纸艺花网站成交型网站
  • 微网站开发周期绵阳低价网站建设
  • 各大网站发布珠海网站制作渠道
  • 钱宝做任务的网站怎么下游戏代理怎么找渠道
  • dedecms仿站wordpress 中文在线留言
  • 建设银行积分兑换网站赞叹天河网站建设公司
  • 怎么搭建自己的网站平台sem是什么电镜
  • 手机网站返回跳转网络推广的调整和优化
  • 淄博做网站公司有哪些沧州网站建设设计定制
  • 南京做企业网站石家庄百度快照优化
  • vue 做pc网站可以吗菏泽网站建设哪家好
  • 阿里云虚拟主机做多个网站徐州专业建站公司
  • ruhe用dw做网站数字营销沙盘模拟
  • 邢台宇鹏网站建设视觉传达设计公司排名前十强
  • 做网站的属于什么岗位国外设计网站怎么打开
  • 简约网站程序什么网站可以直接做word文档
  • 典当行 网站星座 网站 建设
  • 男女直接做网站做视频直播网站
  • 企业网站 微信里怎么做注册安全工程师考试时间
  • 做国际黄金看什么网站惠州公司做网站
  • 网站制作模板wordpress 4.2.20
  • 类似饿了么的网站怎么做做网站被骗了怎么办
  • 宿迁网站建设公司wordpress实现静态化
  • 银狐鑫诺科技 网站建设怎么进行网站优化
  • 成都建设工程交易中心网站一个主机建多少个网站
  • 网站建设的原理温州网站优化页面
  • 辽阳北京网站建设最先进的无锡网站建设
  • 电子商务网站的设计与开发网站管理系统源码