STM32CubeMX RS485接口使用
2024-01-03 10:49:41
一、基本知识
-
TTL(Transistor-Transistor Logic):
- 电平范围: 逻辑1对应于2.4V–5V,逻辑0对应于0V–0.5V。
- 通信特点: 全双工。
- 特点: 常见于单片机和微控制器的IO电平,USB转TTL模块通常是将USB转为TTL电平的串口模块。
-
RS485:
- 电平范围: 逻辑1对应于+2V–+6V,逻辑0对应于-6V—2V。
- 通信特点: 半双工。
- 特点: RS485采用差分信号传输,通过AB两根线的电压差表示电平信号。由于差分信号的特性,RS485具有较好的抗干扰性能,可以允许多达128个收发器连接在同一总线上。
二、cubemx配置
时钟配置
引脚使能 PD5是LED小灯,高电平有效,PD4是485发送使能,高电平有效,PD4低电平默认接收
输出模式选择推挽输出
?串口一配置,默认即可
?生成工程代码
三、代码
main.c中
?添加串口回调函数
/* USER CODE BEGIN 0 */
uint8_t a[10];
//空闲中断回调函数,参数Size为串口实际接收到数据字节数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart->Instance==USART1)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_SET); //将485芯片设置为发送模式
//把收到的一包数据通过串口回传
HAL_UART_Transmit(&huart1,a,Size,0xff);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET); //将485芯片设置为接收模式
//再次开启空闲中断接收,不然只会接收一次数据
HAL_UARTEx_ReceiveToIdle_IT(&huart1,a,sizeof(a));
}
}
/* USER CODE END 0 */
主函数中添加第一次中断接收
/* USER CODE BEGIN 2 */
HAL_UARTEx_ReceiveToIdle_IT(&huart1,a,sizeof(a));//空闲中断接收
/* USER CODE END 2 */
while中进行小灯状态翻转
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_5);
HAL_Delay(100);
/* USER CODE END WHILE */
?运行效果截图
链接: https://pan.baidu.com/s/1ulrCptVIZOq7dkZ3uFwzZA?pwd=tw5v 提取码: tw5v?
文章来源:https://blog.csdn.net/weixin_46286415/article/details/135271623
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!