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

如何用微信打开微网站公众号编辑器哪个好用

如何用微信打开微网站,公众号编辑器哪个好用,东莞网页设计培训中心,合肥市建设工程造价信息网站STM32 CAN快速配置#xff08;HAL库版本#xff09; 目录 STM32 CAN快速配置#xff08;HAL库版本#xff09;前言1 软件编程1.1 初始化1.1.1 引脚设置1.1.2 CAN参数设置1.1.3 CAN滤波器设置 1.2 CAN发送1.3 CAN接收 2 运行测试结束语 前言 控制器局域网总线#xff08;CA…STM32 CAN快速配置HAL库版本 目录 STM32 CAN快速配置HAL库版本前言1 软件编程1.1 初始化1.1.1 引脚设置1.1.2 CAN参数设置1.1.3 CAN滤波器设置 1.2 CAN发送1.3 CAN接收 2 运行测试结束语 前言 控制器局域网总线CANController Area Network是一种用于实时应用的串行通讯协议总线它可以使用双绞线来传输信号是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。 特别说明关于CAN总线协议和硬件电路等问题这里不做介绍网上的资料非常多不懂的同学请自行查阅。 1 软件编程 1.1 初始化 初始化主要分成三部分引脚设置CAN参数设置和CAN滤波器设置。 1.1.1 引脚设置 把CAN_H和CAN_L两个引脚配置成复用功能即可。 注如果CAN控制芯片的S引脚连接到STM32的话还得初始化这个引脚S引脚可以配置成高速模式或静音模式。 参考代码 注该代码可以通过STM32CubeMX生成 /** * brief CAN MSP Initialization * This function configures the hardware resources used in this example * param hcan: CAN handle pointer * retval None */ void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) {GPIO_InitTypeDef GPIO_InitStruct {0};if(hcan-InstanceCAN1){/* USER CODE END CAN1_MspInit 0 *//* Peripheral clock enable */HAL_RCC_CAN1_CLK_ENABLED;if(HAL_RCC_CAN1_CLK_ENABLED1){__HAL_RCC_CAN1_CLK_ENABLE();}__HAL_RCC_GPIOA_CLK_ENABLE();/**CAN1 GPIO ConfigurationPA11 ------ CAN1_RXPA12 ------ CAN1_TX*/GPIO_InitStruct.Pin GPIO_PIN_11|GPIO_PIN_12;GPIO_InitStruct.Mode GPIO_MODE_AF_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate GPIO_AF9_CAN1;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);/* CAN1 interrupt Init */HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0); // CAN接收中断HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);} }1.1.2 CAN参数设置 HAL库的CAN初始化有几个重要参数都存放在几个结构体里面如CAN_HandleTypeDefCAN_InitTypeDef具体的结构体定义可以在HAL库查看。 说明CAN参数需要根据自己实际的需求来配。 我这里着重讲解一下CAN波特率的配置。 CAN波特率 CAN时钟频率 / 分频系数 / (TimeSeg1 TimeSeg2 1)。 其中CAN时钟频率不是固定不变的它取决于CAN所挂载的总线时钟。 比如STM32F1系统时钟最大72MAPB1的总线时钟最大36M而CAN控制器的时钟是挂在APB1的所以CAN的时钟频率也等于APB1的时钟。 如果换作其他型号的MCUCAN外设不一定是挂载到APB1上面的时钟也不一定是36M比如F4系列APB1的时钟是可以配成42M的因此这个要根据实际情况来配置。 参考代码 注该代码可以通过STM32CubeMX生成 /*** brief CAN1 Initialization Function* param None* retval None*/ static void MX_CAN_Init(void) {// CAN波特率 CAN时钟频率 / Prescaler / (TimeSeg1 TimeSeg2 1)// 例 500kbps 36MHz / 9 / (3 4 1) 36MHz为该例程APB1的总线时钟/* USER CODE END CAN1_Init 1 */hcan.Instance CAN1; // 配置CAN1hcan.Init.Prescaler 9; // 预分频系数hcan.Init.Mode CAN_MODE_NORMAL; // 正常CAN模式 hcan.Init.SyncJumpWidth CAN_SJW_1TQ; // 重同步跳跃宽度CAN_SJW_1TQ~CAN_SJW_4TQ hcan.Init.TimeSeg1 CAN_BS1_3TQ; // TimeSeg1 hcan.Init.TimeSeg2 CAN_BS2_4TQ; // TimeSeg2 hcan.Init.TimeTriggeredMode DISABLE; // 非时间触发通信模式 hcan.Init.AutoBusOff DISABLE; // 软件自动离线管理 hcan.Init.AutoWakeUp DISABLE; // 睡眠模式通过软件唤醒(清除CAN-MCR的SLEEP位) hcan.Init.AutoRetransmission DISABLE; // 禁止报文自动重传 hcan.Init.ReceiveFifoLocked DISABLE; // FIFO报文不锁定,新的覆盖旧的 hcan.Init.TransmitFifoPriority DISABLE; // 优先级由报文标识符决定 if (HAL_CAN_Init(hcan) ! HAL_OK){Error_Handler();} }1.1.3 CAN滤波器设置 CAN滤波器的主要作用是筛选CAN接收的数据只有满足设定规则的数据才会被接收否则会被过滤掉。 参考代码 void CAN_Config(void) {CAN_FilterTypeDef sFilterConfig;/* Configure the CAN Filter */sFilterConfig.FilterBank 0; // 过滤器编号使用一个CAN则可选0-13使用两个CAN可选0-27sFilterConfig.FilterMode CAN_FILTERMODE_IDMASK; // 过滤器模式掩码模式或列表模式sFilterConfig.FilterScale CAN_FILTERSCALE_32BIT; // 过滤器位宽sFilterConfig.FilterIdHigh 0x0000; // 过滤器验证码ID高16位0-0xFFFFsFilterConfig.FilterIdLow 0x0000; // 过滤器验证码ID低16位0-0xFFFFsFilterConfig.FilterMaskIdHigh 0x0000; // 过滤器掩码ID高16位0-0xFFFFsFilterConfig.FilterMaskIdLow 0x0000; // 过滤器掩码ID低16位0-0xFFFFsFilterConfig.FilterFIFOAssignment CAN_RX_FIFO0; // FIFOx0或1sFilterConfig.FilterActivation ENABLE; // 使能过滤器sFilterConfig.SlaveStartFilterBank 14; // 从过滤器编号0-27对于单CAN实例该参数没有意义if (HAL_CAN_ConfigFilter(hcan, sFilterConfig) ! HAL_OK){/* Filter configuration Error */}/* Start the CAN peripheral */if (HAL_CAN_Start(hcan) ! HAL_OK){/* Start Error */}/* Activate CAN RX notification */if (HAL_CAN_ActivateNotification(hcan, CAN_IT_RX_FIFO0_MSG_PENDING) ! HAL_OK){/* Notification Error */} }1.2 CAN发送 CAN发送需要先配置发送参数我这里为了方便测试直接固定发送标准帧ID也是固定的。 实际使用时可以再增加一个ID的入参这样会更灵活一点。 参考代码 /**************************************************************************** * 名 称: uint8_t CAN_Send_Msg(uint8_t* msg, uint8_t len) * 功 能can发送一组数据(固定格式:ID为0X12,标准帧,数据帧) * 入口参数len:数据长度(最大为8) msg:数据指针,最大为8个字节. * 返回参数0,成功;其他,失败; * 说 明 ****************************************************************************/ uint8_t CAN_Send_Msg(uint8_t* msg, uint8_t len) { uint8_t i0;uint8_t message[8];uint32_t TxMailbox;CAN_TxHeaderTypeDef CAN_TxHeader;// 设置发送参数CAN_TxHeader.StdId 0x12; // 标准标识符(12bit)CAN_TxHeader.ExtId 0x12; // 扩展标识符(29bit)CAN_TxHeader.IDE CAN_ID_STD; // 使用标准帧CAN_TxHeader.RTR CAN_RTR_DATA; // 数据帧CAN_TxHeader.DLC len; // 发送长度 CAN_TxHeader.TransmitGlobalTime DISABLE;// 装载数据for(i 0; i len; i){message[i] msg[i];}// 发送CAN消息if(HAL_CAN_AddTxMessage(hcan, CAN_TxHeader, message, TxMailbox) ! HAL_OK) {return 1;}while(HAL_CAN_GetTxMailboxesFreeLevel(hcan) ! 3) {}return 0; }1.3 CAN接收 接收部分只要开启了Rx中断在CAN控制器收到消息时会调用RxFifo的回调函数此时我们在这里读取数据并根据实际情况做相应的处理即可。 参考代码 /******************************************************************************* * Function Name : HAL_CAN_RxFifo0MsgPendingCallback * Description : 消息接收回调函数 * Input : hcan * Output : None * Return : None ****************************************************************************** */ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {// 收到CAN数据会触发接收中断进入该回调函数uint32_t i;uint8_t RxData[8];CAN_RxHeaderTypeDef CAN_RxHeader; if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, CAN_RxHeader, RxData) HAL_OK){// 串口打印接收结果printf(GetRxMessage, CANID:0x%0X, Data:, CAN_RxHeader.StdId);for(i 0;i CAN_RxHeader.DLC; i){printf(%02x , RxData[i]);}// 把接收的数据用CAN再发回去CAN_Send_Msg(RxData, CAN_RxHeader.DLC);} }2 运行测试 使用USB-CAN工具测试发送 消息窗口如下 可以看到上位机发送了一条CAN数据CANID为0x01接着就收到了STM32回的一条数据CANID为0x12因为我代码固定写死了ID为0x12。 同样的通过串口也能看到STM32收到的CAN数据如下图所示 还有一些其他测试比如收发不同长度切换扩展帧等等这里就不展示了感兴趣的同学可以自己改参数试试。 结论CAN收发正常。 结束语 好了关于如何通过STM32如何配置和使用CAN就讲到这里如果你有什么问题或者有更好的方法欢迎在评论区留言。
http://www.dnsts.com.cn/news/176911.html

相关文章:

  • 校园网站开发需求wordpress怎么共享到朋友圈
  • 制作网站需要的软件手机网站怎么搭建
  • 网站被k 申诉动态ip怎么做网站
  • 住房和城乡建设部注册中心网站网站如何做质保系统
  • 网站建设报价单格式学校网站建设报价
  • 销售易crm官网seo排名网站 优帮云
  • 网站制作公司去哪找客户网站做成小程序
  • 佛山美容网站建设手机开发者选项在哪里找
  • 比较简洁大方的网站自己写代码做网站要什么技术
  • 网站的具体内容wordpress花园视频教程
  • 黑科技软件合集网站小红书体现的网络营销方式
  • 鹤山市住房和城乡建设局网站做兼职比较正规的网站
  • 我想克隆个网站 怎么做地产网站建设公司
  • 顺德精品网站建设如何做网站教程简单
  • 长春市城乡建设部网站网站需要数据库吗
  • 西安好的网站建设公司排名临时网页生成
  • 阳春做网站抖音测一测小程序怎么赚钱
  • 做网站滨州市150网站建设
  • 关于网站建设的标语仿抖音网站开发
  • 免费做企业网站西安千度网站建设
  • 浙江省建设厅网站图审备案宁波seo优化
  • 网站建设实验小结七牛云
  • 建设网站工作内容龙象建设集团有限公司网站
  • 好用心 做网站送女友网店怎么开要多少钱
  • 研究生核心课程建设网站如何介绍设计的网站模板下载地址
  • 学校网站的作用做网站的预算表
  • 工信部网站怎么查网址御名是什么意思
  • 安徽省水利厅j建设网站建站套餐
  • 自家电脑做网站中国国际室内设计师网
  • 网易做网站吗阿里云备案域名购买