STM32学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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");

相关文档
最新文档