马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
STM32F407+LAN8720A +LWIP +FreeRTOS ping通
上一篇实现了LWIP ping 通
本篇实现UDP通讯
实现如下功能:
- 串口1空闲停止+DMA吸取,收到数据用UDP发送
- UDP吸取,收到数据用串口1发送
STM32CUBEIDE设置和代码
1. 设置UARAT1的空闲停止+DMA吸取
UART1吸取到数据,开释信号量,在使命中举行数据处置惩罚(UDP发送)
- /* USER CODE END Header_StartTask03 */
- void StartTask03(void const * argument)
- {
-
-
- /* USER CODE BEGIN StartTask03 */
- uint16_t len_data;
- HAL_UARTEx_ReceiveToIdle_DMA(&huart1, buletooth_rxBuf, 250);
- hdma_usart1_rx.Instance->CR &= ~(DMA_IT_HT);//取消接收一半中断
- /* Infinite loop */
- for(;;)
- {
-
-
- //UART RECEIVED, UDP SEND
- osSemaphoreWait (BinarySem_BLUE_RecHandle, osWaitForever);
- if(ble_rxBuf_len > 0)
- {
-
-
- len_data = ble_rxBuf_len;
- udp_client_send_data(buletooth_rxBuf, len_data);
- }
- }
- /* USER CODE END StartTask03 */
- }
- /* Private application code --------------------------------------------------*/
- /* USER CODE BEGIN Application */
- void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
- {
-
-
- if(huart->Instance == USART1)
- {
-
-
- ble_rxBuf_len = Size;
- osSemaphoreRelease (BinarySem_BLUE_RecHandle);
- HAL_UARTEx_ReceiveToIdle_DMA(&huart1, buletooth_rxBuf, 250);
- }
- }
复制代码 2. 设置UDP
- void udp_client_init(void)
- {
-
-
- ip_addr_t serverIP;
- err_t err;
- IP4_ADDR(&serverIP, 192, 168, 111, 11);
- upcb = udp_new();
- if (upcb != NULL)
- {
-
-
- /* 配置本地端口 */
- upcb->local_port = UDP_LOCAL_PORT;
- /* 配置服务器IP和端口号*/
- err = udp_connect(upcb, &serverIP, UDP_REMOTE_PORT);
- if (err == ERR_OK)
- {
-
-
- /* 注册接收回调函数 */
- udp_recv(upcb, udp_receive_callback, NULL);
- printf("UDP INIT SUCCESS\r\n");
- }
- else
- {
-
-
- udp_remove(upcb);
- }
- }
- }
- static void udp_receive_callback(void *arg, struct udp_pcb *upcb,struct pbuf *p, const ip_addr_t *addr, u16_t port)
- {
-
-
- if (p != NULL)
- {
-
-
- struct pbuf *ptmp = p;
- while (ptmp != NULL)
- {
-
-
- memset(cache_udprece, 0, sizeof(cache_udprece));
- memcp
复制代码 |