接上一节内容,目前已经配置好了按键和LED灯的控制
从本节开始,Cubemx生成后的代码将移植到之前的项目中
1 Cubemx串口配置
把上次的例子复制一份到新的文件夹中
然后打开
查看板子原理图,所用串口1引脚为PB6(RX),PB7(TX)
PB7同理
使能串口(接受)中断
生成代码
2 串口代码
在串口头文件中添加
串口文件中添加中断回调函数,改变输入输出接口函数
/* USER CODE BEGIN 1 */
//清空接收缓冲
void uart_FlushRxBuffer(void)
{
UART_RxPtr = 0;
UART_RxBuffer[UART_RxPtr] = 0;
}
//接受中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//测试是否进入接受中断
HAL_GPIO_WritePin(LED_2_GPIO_Port, LED_2_Pin, GPIO_PIN_RESET);
HAL_UART_Receive_IT(&huart1, &UART_RxPtr, 1);
}
/***************** 发送字符 **********************/
void Usart_SendByte(uint8_t str)
{
HAL_UART_Transmit(&huart1, &str, 1, 1000);
}
/***************** 发送字符串 **********************/
void Usart_SendString(uint8_t *str)
{
unsigned int k=0;
do
{
HAL_UART_Transmit(&huart1,(uint8_t *)(str + k) ,1,1000);
k++;
} while(*(str + k)!='\0');
}
///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口DEBUG_USART */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);
}
///重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
int ch;
HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);
return (ch);
}
/* USER CODE END 1 */
记得定义数组和头文件
编译+烧录 使用野火的串口调试助手,在发送数据后进入串口中断LED灯会点亮,配置成功
3 串口程序移植+液晶显示程序移植(选做)
液晶显示的文件移植了(选做)由于移植液晶显示太麻烦,于是直接用液晶显示例程当工程源文件,把之前的配置移植到里面
把中断文件里的usart中断加上
把头文件替换,错报缺的补上,初始化函数加上之前的功能,编译通过后LCD、KEY、LED、串口功能正常运行,移植成功