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

搜索网站怎么做dw个人网站模板下载

搜索网站怎么做,dw个人网站模板下载,商城手机网站制作,小程序开发公司官网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.tj-hxxt.cn/news/231466.html

相关文章:

  • 中国知名网站排行榜ueditor wordpress 插件
  • 网站开发的关键技术与难点西安app制作公司
  • 网站建设 别墅经常用表格进行页面布局
  • 昆明市建设局官方网站贵阳网站建设哪家
  • 网站建设视频百度网盘下载江苏建设工程信息网官网入口
  • 罗湖网站建设设计精仿36氪(36kr)wordpress主题
  • 摄影网站开发背景asp php jsp网站开发
  • 杭州俄语网站建设wordpress怎么改登陆不了
  • 最便宜的重庆网站建设米拓与wordpress
  • 东莞东城网站建设公司苏州苏网建设公司在建工程
  • 中山网站设计网页游戏制作过程的
  • 帝国网站7.2 pc wap 跳转wordpress阿里百变
  • asp.net网站sql权限设置公司装修设计公司
  • 网站维护中 源码用网站做邮箱
  • 广州网站改版方案网站怎么弄缩略图上传
  • 成都市做网站公司网站建设丨找王科杰专业
  • 南通优普营销网站建设温州制作企业网站
  • 洛夕网站建设想学软件开发报什么专业
  • 如何创建一个免费的网站网站管理和维护
  • 网站公司市场营销方案页面访问升级老域名
  • 郑州网站优化服务wordpress super 缓存
  • 宁波网站建站推广wordpress如何设置404页面跳转
  • iis网站怎么做全站伪静态网页设计与网站建设在线考试石油大学
  • 网站加速代码移动网站设计心得
  • 烟台网站建设设计西安企业建站排名
  • 网站建设网站制作做网站多少钱西宁君博美评
  • 网络设计课程总结网络优化公司哪家好
  • 网站 手机版 电脑版 怎么做国外服务器免费ip地址
  • 东莞门户网站建设东莞人才市场最新招聘信息
  • ipad怎么制作网站七冶建设集团网站