完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、硬件电路
STM32F103EVT6基本电路;选择串口1、串口2;串口2通过485接口输出,控制端是PC9端口,PC9=1时接收,0时发送。 二、CubeMX完成配置,生成工程 配置时钟、调试模式、IO、串口1、串口2参数、打开串口中断。 三、Keil添加代码,完成功能 /* USER CODE BEGIN PV */ //接收状态,完毕标志为1;处于接收状态则为0 uint8_t uart1Rxstate=0; //当前接收的字节总数 uint8_t uart1RxCounter=0; //接收缓冲 uint8_t uart1RxBuff[128]={0}; //uart2接收 //接收状态,完毕标志为1;处于接收状态则为0 uint8_t uart2Rxstate=0; //当前接收的字节总数 uint8_t uart2RxCounter=0; //接收缓冲 uint8_t uart2RxBuff[128]={0}; void USER_UART2_IRQHandler(void); /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ int fputc(int ch,FILE *f) { HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff); return ch; } /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* 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_TIM6_Init(); MX_USART1_UART_Init(); MX_USART2_UART_Init(); /* USER CODE BEGIN 2 */ //开串口中断 __HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE); __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE); //串口2 485接收使能 HAL_GPIO_WritePin(RS485_TX_EN_PORT, RS485_TX_EN_PIN, GPIO_PIN_RESET); printf("Test UART1 out Hello STM32!"); char tr2[]="UART2 transmit sentence for test !"; HAL_Delay(500); HAL_GPIO_WritePin(RS485_TX_EN_PORT, RS485_TX_EN_PIN, GPIO_PIN_SET); HAL_UART_Transmit(&huart2,(uint8_t *)&tr2,sizeof(tr2),0xffff); HAL_GPIO_WritePin(RS485_TX_EN_PORT, RS485_TX_EN_PIN, GPIO_PIN_RESET); HAL_Delay(500); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ // 串口1接收到数据,串口2输出 if(uart1Rxstate==1) { HAL_GPIO_WritePin(RS485_TX_EN_PORT, RS485_TX_EN_PIN, GPIO_PIN_SET); HAL_UART_Transmit(&huart2,(uint8_t *)&uart1RxBuff,uart1RxCounter,0xffff); HAL_GPIO_WritePin(RS485_TX_EN_PORT, RS485_TX_EN_PIN, GPIO_PIN_RESET); memset(uart1RxBuff,0,128); uart1Rxstate=0; uart1RxCounter=0; } // 串口2接收到数据,串口1输出 if(uart2Rxstate==1) { HAL_UART_Transmit(&huart1,(uint8_t *)&uart2RxBuff,uart2RxCounter,0xffff); memset(uart2RxBuff,0,128); uart2Rxstate=0; uart2RxCounter=0; } } /* USER CODE END 3 */ } 四、串口调试工具调试测试 利用串口调试工具调试。 |
|
|
|
只有小组成员才能发言,加入小组>>
3323 浏览 9 评论
3000 浏览 16 评论
3498 浏览 1 评论
9073 浏览 16 评论
4093 浏览 18 评论
1193浏览 3评论
613浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2341浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1899浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 16:55 , Processed in 1.927375 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号
|