ARMday2

1.总结串口的发送和接收功能使用到的函数
一、串口发送数据函数
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
UART_HandleTypeDef *huart:指定我们使用的哪个串口,需要指定串口1
const uint8_t *pData:要发送的数据
uint16_t Size:要发送的数据的长度,strlen,sizeof,sizeof会计算\0。sizeof计算字符串所占内存的大小,strlen计算字符串的长度。
uint32_t Timeout:超时时间,单位是ms,在规定时间没有将数据发送出去就会退出当前函数,执行下一句代码。
HAL_StatusTypeDef:是否成功发送数据
二、串口重定向
printf是向终端去打印数据,在STM32中是没有这个终端,只有串口,所以在STM32中无法直接使用串口打印出数据。
int fputc(int ch, FILE* f)
{
    //uint8_t : unsigned          char
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 1000);//重新实现fputc发送一个字符的功能
 return ch;
}
三、串口的接收
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:是否成功开启串口接收
四、串口接收中断
//串口接收中断完成回调函数,当接收到指定的数据后就会调用到这个函数,当接收到一个字节就会调用到这个函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
五、DMA串口发送函数
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
UART_HandleTypeDef *huart:指定要给哪个串口发送数据
const uint8_t *pData:要发送的数据
uint16_t Size:要发送数据的长度
HAL_StatusTypeDef:是否发送成功数据
六、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:是否成功开启DMA+空闲中断
2.总结DMA的作用,和DMA+空闲中断的使用方式
作用:
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据都可以通过DMA进行快速地传输。这就为其他操作保留了CPU资源。
优点
使用DMA可以减轻CPU的负担,提升CPU的资源利用率。DMA传输数据比较快,适用于处理图片、视频、音频等数据量较大的场合。
串口空闲中断:
串口在一段时间(发送一个字节的数据的时间)后一直没有数据到达就会产生一个空闲中断。
无论发送多长的数据在间隔一段时间后都会产生空闲中断,产生了空闲中断就知道已经接收完成了一次数据,在中断中就可以去处理这一次数据。
3.使用PWM+ADC光敏电阻完成光控灯的实验

HAL_ADC_Start(&hadc);
adc_val = HAL_ADC_GetValue(&hadc);
adc_real = adc_val*1000.0/4095.0;
printf("adc_val = %d",(int)adc_real);
HAL_Delay(50);
TIM3->CCR3 = (int)adc_real;

VID_20240329_171435


 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值