当前位置: 代码迷 >> 综合 >> STM32------>第三天,spi补充,uart-dma,NB-loT介绍,At指令,串口透传
  详细解决方案

STM32------>第三天,spi补充,uart-dma,NB-loT介绍,At指令,串口透传

热度:35   发布时间:2023-12-03 10:25:46.0

spi 补充

uart通讯: 通讯双方波特率,帧格式必须一致

spi通讯:  通讯双方极性,相位一致

Lcd

/*************************************************
函数名:Lcd_Clear
功能:全屏清屏函数
入参函数:填充颜色COLOR
返回值:无
*************************************************/
void Lcd_Clear(uint16_t Color)               
{	unsigned int i,m;Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);// 设置显示区域(整个屏幕)Lcd_WriteIndex(0x2C);//发送命令for(i=0;i<X_MAX_PIXEL;i++)for(m=0;m<Y_MAX_PIXEL;m++){	LCD_WriteData_16Bit(Color);}   
}

uart-dma

/****main.c***/__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE); //使能uart1 的空闲中断__HAL_UART_CLEAR_FLAG(&huart1,UART_CLEAR_IDLEF);  //  清除uart1 的空闲中断标志HAL_UART_Receive_DMA(&huart1,uartdmabuff,80); //dma 方式接收最多80个字节,接收到uartdmabuffif(uartdmafinished)    //判断dma是否结束{for(i = 0; i < dmalength; i++)   //打印dma 接收的数据{printf("%c",uartdmabuff[i]);}uartdmafinished = 0;//HAL_UART_Receive_DMA(&huart1,uartdmabuff,80);  // 启动下次dma 接收}/***stm32f0xx_it.c***/
void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) == SET)//uart1 是否空闲, 说明dma 结束了{__HAL_UART_CLEAR_FLAG(&huart1,UART_CLEAR_IDLEF);  //  清除uart1 的空闲中断标志HAL_UART_DMAStop(&huart1);//停止dma接收uartdmafinished = 1;//置dma 结束的标志dmalength = 80-hdma_usart1_rx.Instance->CNDTR;//得到此次dma接收的字节数//该寄存器hdma_usart1_rx.Instance->CNDTR 初始值80, 收到n个字节, 该寄存器为80-n,printf("finished\r\n");}/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 *//* USER CODE END USART1_IRQn 1 */
}

NB-IoT 介绍

Narrow Band Internet of Things  窄带物联网

 

At指令

模块与计算机之间的通信协议是一些AT指令集

AT+CFUN=0关闭射频功能

AT+CFUN=1开启射频功能

AT+NBAND?查询模组配置频段

AT+NBAND=5配置模组为电信频段

AT+CGSN=1 查询IMEI号

AT+CGSN=1,201612091450303 设置IMEI号

AT+NCDP=XX.XX.XX.XX 设置 IoT 平台 IP 地址(非 COAP 协议可以不配置)

串口透传,格西烽火(使用At指令)

PC 和 stm32 的uart1 通讯

nb 模块和 stm32 的uart2 通讯

stm32 把uart1 收到的数据, 从uart2 发出,

stm32 把uart2 收到的数据, 从 uart1 发出,实现透传

stm32 实现透传:

void USART2_IRQHandler(void){/* USER CODE BEGIN USART2_IRQn 0 */if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE) == SET){while((USART1->ISR&0x40) == 0) ;USART1->TDR = USART2->RDR;}