c网站开发视频教程,济宁百度竞价推广,wordpress frame主题,网站排名制作公司1. 串口通信
配置串口为异步通信
设置波特率#xff0c;数据位#xff0c;校验位#xff0c;停止位#xff0c;数据的方向
同步通信
在同步通信中#xff0c;数据的传输是在发送端和接收端之间通过一个共享的时钟信号进行同步的。这意味着发送端和接收端的时钟需要保持…1. 串口通信
配置串口为异步通信
设置波特率数据位校验位停止位数据的方向
同步通信
在同步通信中数据的传输是在发送端和接收端之间通过一个共享的时钟信号进行同步的。这意味着发送端和接收端的时钟需要保持同步以确保数据在正确的时间传输。在同步通信中数据被划分成等长的块并且在每个时钟周期内传输一个完整的数据块。因此发送方和接收方需要严格按照时钟信号的节奏进行数据的发送和接收。
异步通信
在异步通信中数据的传输是通过一组起始和停止信号来确定的而不是通过共享的时钟信号。每个数据块都有一个起始位和一个或多个停止位用于确定数据的开始和结束。异步通信中发送端和接收端的时钟不需要保持同步因此可以更灵活地处理速度不同步的情况。
区别
时钟同步在同步通信中发送端和接收端需要共享一个时钟信号以同步数据传输而在异步通信中时钟信号不是必需的数据的传输通过起始和停止信号来确定。
速度区别
同步通信速度同步通信的速度受制于时钟信号的频率因为数据的传输是根据时钟信号进行同步的。发送端和接收端需要以相同的时钟频率进行数据传输因此速度受限于这一频率。
异步通信速度相比之下异步通信的速度没有受到严格的时钟同步的限制。由于数据的传输是通过起始和停止信号来确定的因此发送端和接收端可以以不同的速度进行数据传输。这意味着异步通信可以更灵活地处理速度不同步的情况因此在某些情况下可能会比同步通信更快。
灵活性由于不需要时钟同步异步通信更灵活能够处理速度不同步的情况而同步通信需要发送端和接收端保持严格的时钟同步因此在处理速度不同步的情况下可能会出现问题。
串口发送数据
函数
UART串口异步发送A异步
USART串口的同步和异步发送S同步 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) UART_HandleTypeDef *huart指定要使用的串口 const uint8_t *pData要发送的数据typedef unsigned char uint8_t; uint16_t Size要发送数据的大小 uint32_t Timeout超时时间单位是ms1000ms HAL_StatusTypeDef数据是否成功发送 串口重定向
串口重定向就是将串口的功能重新定向到标准输入或者是标准输出当中。
在stm32cube中配置 在usart.c中包含头文件并编写函数 //重新实现fputc的功能 int fputc(int ch, FILE* f) { HAL_UART_Transmit(huart1, (uint8_t*)ch, 1, 1000); return ch; } 调用printf会调用到fputc所以我们只需要将fputc重新实现就可以实现使用printf来向电脑打印数据的功能。 串口接收数据
打开串口接收中断
当接收到数据后就会调用到接收中断回调函数 HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) UART_HandleTypeDef *huart指定要接收数据的串口 uint8_t *pData数据缓冲区用来保存数据 uint16_t Size每次要接收多少字节数据 HAL_StatusTypeDef是否成功打开接收中断 串口接收中断回调函数 __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { } 注意事项每次接收完数据后都需要重新打开接收中断。 2. DMA
在嵌入式系统中DMADirect Memory Access直接内存访问也是一种重要的技术用于实现外部设备和系统内存之间的高效数据传输从而减轻CPU的负担提高系统性能。在嵌入式系统中由于资源有限、对功耗和性能要求较高因此DMA技术显得尤为重要。通过DMA技术嵌入式系统可以更高效地进行数据传输和处理从而满足各种应用场景的需求。 DMA的优点
1.使用DMA可以减轻CPU负担提高系统的运行效率
2.使用DMA可以快速传输数据像音频视频等数据量较大的数据 配置DMA传输数据
传输函数 HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) 注意不需要超时时间了因为CPU得到了释放不需要一直等待将数据发送完成这个工作交给了DMA 空闲中断DMA处理不定长数据
CPU不知道外部什么时候会发来数据可以开启DMA接收让DMA一直监测是否有数据当有数据并且接收完一包数据就产生空闲中断处理数据。 开启DMA接收
以DMA空闲中断的方式接收数据的函数 HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) UART_HandleTypeDef *huart指定从哪个串口接收数据 uint8_t *pData数据保存的缓冲区 uint16_t Size要接收数据的大小 HAL_StatusTypeDef是否成功开启 空闲中断回调函数 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { } 3. ADC采样
ADC是一种将模拟信号转换为数字信号的一种器件或者是电路。
STM32Cubemx配置ADC采样
开启ADC采样函数 HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) HAL_StatusTypeDef是否成功打开 ADC_HandleTypeDef* hadc指定要打开哪个ADC 获取采样数值 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) ADC_HandleTypeDef* hadc要对哪个ADC进行采样 uint32_t代表采样到的数据 4. PWM
PWM是脉宽调制Pulse Width Modulation的缩写。它是一种通过控制信号的脉冲宽度来产生模拟效果的技术。PWM信号由一系列周期性的脉冲组成每个脉冲的宽度可以调整从而改变其平均功率或能量。
PWM信号常用于控制电机速度、LED亮度调节、音频信号合成等应用中。例如在电机驱动器中通过调整PWM信号的脉冲宽度可以控制电机的转速在LED调光控制中通过调整PWM信号的脉冲宽度可以实现LED的亮度调节。 打开定时器的PWM通道
函数 HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) TIM_HandleTypeDef *htim指定要打开的定时器 uint32_t Channel指定要打开的通道 HAL_StatusTypeDef是否打开成功 作业
1. 2.
在stmcubemx开启DMA接收
使用函数HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)以空闲中断的方式接收数据
在回调函数void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)中编写功能代码此时当接收数据后搁一段时间没有数据继续出现则执行回调函数。