STM32学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、GPIO函数:
输出:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//此例以PA12口为例
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //此例以PA12口为例
HAL_GPIO_ TogglePin(GPIOA,GPIO_PIN_12); //此例以PA12口为例
2、串口函数:
1、串口发送/接收函数
HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制
HAL_UART_Receive();串口轮询模式接收,使用超时管理机制
HAL_UART_Transmit_IT();串口中断模式发送
HAL_UART_Receive_IT();串口中断模式接收
HAL_UART_Transmit_DMA();串口DMA模式发送
HAL_UART_Transmit_DMA();串口DMA模式接收
2、串口中断函数
HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用
HAL_UART_TxCpltCallback();数据完全发送完成后调用
HAL_UART_RxHalfCpltCallback();一半数据接收完成时调用
HAL_UART_RxCpltCallback();数据完全接受完成后调用
HAL_UART_ErrorCallback();传输出现错误时调用
例程:串口接收中断
uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n";
uint8_t aRxBuffer[20];
2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中
HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度
HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);
3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时可以在中间加任何可执行代码。
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) // 串口接收中断
{
if(huart->Instance == USART1) // 判断是由哪个串口触发的中断 if(huart==&huart1)
{
HAL_UART_Transmit(&huart1,aRxBuffer1,1,100); // 接收到数据马上使用串口1发送出去
HAL_UART_Receive_IT(&huart1,aRxBuffer1,1); // 重新使能串口1接收中断
}
if(huart->Instance == USART2)
{
HAL_UART_Transmit(&huart2,aRxBuffer2,1,100); // 接收到数据马上使用串口1发送出去
HAL_UART_Receive_IT(&huart2,aRxBuffer2,1); // 重新使能串口2接收中断
}
}
4、编译后下载至开发板,进行复位后通过串口监视器可看到串口发送的aTxStarMessages字符串,向串口发送10个字节的数据后可看到串口将所接收数据又发送回来(注意由于HAL_UART_Receive_IT()函数中的字节参数设置为了10,故只有发送10个字节的字符串才会被串口返回,且由于while循环中无语句,该程序只能执行一次)
memcpy(txbuf,"将这里的数据拷到txbuf里\n",100);
HAL_UART_Transmit(&huart1,txbuf,strlen((char *)txbuf),1000);//将txbuf里的内容通过串口发出。
HAL_UART_Transmit(&huart1,test_buf,10,1000); uint8_t test_buf[10];
其中:&huart1为串口代号,txbufo为数据缓冲器,1000为发送时间
HAL_UART_Transmit(&huart2,txData,sizeof(txData)-1,0xffff);
HAL_UART_Receive_IT(&huart1,&aRxBuffer,10); //串口接收,并将接受的数据,放在aRxBuffer地址里。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
memcpy(txbuf,"My name is Dr.Ark!\n",100);
prinrf函数添加以下代码,在(main())之前。
int fgetc(FILE * f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1,&ch, 1, 0xffff);
return ch;
}
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return(ch);
}
例:printf("hello everyone!\r\n");
printf("Hello Qi!\r\n");