- HAL_StatusTypeDef HAL_Receive_IT(UART_HandleTypeDef *huart, uint8_ *pData, uint16_t size)
- {
- if (huart->RxState == HAL_UART_STATE_REDAY)
- {
- if ((pData == Null)) || (size == 0U)
- {
- return HAL_ERROR;
- }
- __HAL_LOCK(huart);
- huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
- return (UART_Start_Receive_IT(huart, pData, Size));
- }
- else
- {
- return HAL_BUSY;
- }
- }
这个代码名称为HAL_Receive_IT,中断接收函数,这个函数用来表示操作的状态(名称为HAL_StatusTypeDef状态类型)
接收三个参数,分别为:
·huart:用来指向uart句柄的指针,该句柄配置了uart模块配置信息
·pData:指向数据缓冲区的指针,用来存储接受的数据
·size:接受数据的大小,以字节为单位。
1.蓝牙控制led灯显示
通过cubemx初始化接口,这里采用c11作为输出引脚,pb10,pb11也就是uart3作为串口进行发送接收数据,代码如下:
- uint_8 Byte;
- while(1)
- {
- HAL_StatusTypedef status=HAL_UART_Receive(&huart, &Byte, 1, 1000)
- if(status==HAL_OK){
- if(Byte==0x41)
- {
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET)
- }
- else
- {
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN11,GPIO_PIN_RESET)}
- }}
uint8_t Byte;
这个代码有问题,目前是传输的问题,能传但是传的数据是什么形式暂时还不太清楚。
下午又整了一下,发现还是传不过来,准备用中断来进行传输了,这里要注意Byte里面存的是数据,而&Byte代表的是地址,而不是数据,它是一个指针,接收的是内容,下面的if语句是判断数据是否为0x41这是一个无符号8位整数,41对应的就是0100 0001,8位。取值范围为0-255,一个字节有8位。
1.输出pwm波对舵机进行驱动
(1)外设时钟使能寄存器是什么
用来控制片上各种时钟工作状态的寄存器,控制定时器(TIM),看门狗(WWDG),串行外设接口(SPI),同步异步收发器(USART),I2C(总线串行接口),usb(通用串行总线),CAN(控制域局域网),RCC_APB1是外设时钟使能寄存器,他是8位的,通过设定指定的位,可以控制相应的外设开启或者关闭时钟,
他竟然有32位,我的天哪,这是想控制多少东西呀。
这里使用固件库吧,从底层开始做比较有意思,固件库资料里面是定义的函数,用户手册则是使用的一些地址,这两个是一样的,只不过固件库是对用户手册中的一些地址封装成了固定的函数,使用的时候直接调用即可,数据手册则是查看引脚的服用接口,以及做什么用的。
波特率是用来传输速度控制的,也就是时钟,时钟方波,一个周期传输一位数bite。
12.立创·开发板GD32教程:串口通信原理介绍_哔哩哔哩_bilibili
串口控制灯,首先串口配置。调用.h文件需要配置,加到这里.h的上一级文件。
新建usart文件,之后
新建两个文件
添加