历史上的今天
今天是:2025年07月09日(星期三)
2019年07月09日 | STM32_HAL库入门笔记(一) USART配置
2019-07-09 来源:eefocus
串口发送功能:
uint8_t TxData[10]= "01234abcde";
HAL_UART_Transmit(&huart2,TxData,10,0xffff);//把TxData的内容通过uart2发送出去,长度是10,timeout的时间是最大值0xffff
串口接收功能1:
uint8_t value='F';
HAL_UART_Receive(&huart2,(uint8_t *)&value,1,1000);//在这个语句停留1000ms内等待接收1个字节数据,把数据存放在value中
串口接收功能2:
HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1);//程序不会在这个语句停留,直接会按照中断方式把接收数据存放在value中,但是这个语句只能使能一次串口中断。所以要在中断服务函数或者回调函数中重新使能
串口接收功能3:
if(HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1) != HAL_OK){ //这一句写在main函数的while(1)上面。用于启动程序启动一次中断接收
HAL_UART_Transmit(&huart2, (uint8_t *)&"ERRORrn",7,10);
while(1);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&"rninto HAL_UART_RxCpltCallbackrn",32,0xffff); //验证进入这个函数了
HAL_UART_Transmit(&huart2,(uint8_t *)&value,1,0xffff); //把接收到的数据通过串口发送出去
HAL_UART_Receive_IT(&huart2,(uint8_t *)&value,1); //重新打开串口中断
}
串口DMA发送
DMA的TX要这样设置

uint8_t txData[] = {"HelloWorldrn"};
HAL_UART_Transmit_DMA(&huart2,txData,sizeof(txData));//可以通过DMA把数据发出去
DMA接收
if(HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-1) != HAL_OK)//main函数while(1)前,启动一次DMA接收
{
Error_Handler();
}
串口回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle){
uint8_t temp[] = {"rnin Callbackrn"};
HAL_UART_Transmit_DMA(&huart2,temp,sizeof(temp)-1);//可以通过DMA把数据发出去
HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxData, sizeof(rxData)-1); //重新使能接收
}
main函数while(1)中不断输出rxData值
HAL_UART_Transmit_DMA(&huart2,rxData,sizeof(rxData)-1);//可以通过DMA把数据发出去
总结:分轮询方式和中断方式。发送可以使用轮询方式进行,接收建议使用中断方式,如使用轮询方式,会占用系统工作内存过多的现象。
现在需要考虑的地方在于,回调函数放在哪里比较合适。
史海拾趣
|
PDF目录导航 一、 GPS基础知识二、 GPS应用基础三、 GPS接收机原理图四、 GPS模块五、 手机 - GPS导航方案六、 PDA - GPS导航方案七、 笔记本电脑 - GPS导航方案八、 GPS一体机 - GPS导航方案九、 选择GPS方案所应考虑的几个方面十、 主流GPS方案供 ...… 查看全部问答> |
|
无线监控在一些特殊领域中,如偏远山区、水电站等区域,发挥着越来越重要的作用。而3G的兴起,也为无线监控带来新的发展。 随着第三代移动通信技术(3G)商业化应用规模的不断拓展,三大运营商纷纷基于3G高速无线接入的特性,发展多 ...… 查看全部问答> |
|
尊敬的各位师傅们,我是个菜鸟想学习图形开发,但不知道它在计算机中的工作原理,不明白屏幕上显示的字符和图形和显存,内存的关系,希望大家帮帮我!非常感谢!!!最好能 GDI函数和内存显存的关系?GDI函数是运行在内存还是显存? 穿透色和透明区别??? 那裁剪区域可以作用于画布和图层吗? 显存和屏幕缓冲的区别是什么?都是在显卡里吗?还是说显示器上还有缓冲吗? 显存和屏幕缓冲与图层和画布的关系是什 ...… 查看全部问答> |
|
今天看这个操作,看的我都晕了,InterruptInitialize函数, 我现在有些不懂了,这个是驱动层面的东西,应该。 而本身windows对驱动层面,应用层面分得比较清楚, 我不知道是不是wince也是这样, 我把这段代码 HANDLE hEvent1; ...… 查看全部问答> |
|
wince下的线程方法(c#)没有像pc上那么方便的挂起,重启功能,要让线程挂起一段时间在从挂起的地方开始有没有什么好办法呢目前我是采用成员变量来控制的 while (pause){},给定一个循环让他不停转直到外部判断跳出循环,总觉得这样做很不可靠而且c# ...… 查看全部问答> |
|
我的max264滤波器设置如下:采用模式3,外部时钟2M,分频后1M,中心频率10kHz 品质因数:0.5871;在调试时输入的信号却从10Hz到100KHz均可通过,但是输出的波形已经失真,输入波形为正弦波,输出时,在频率比较低时输出的是被削去一点波峰的 ...… 查看全部问答> |
|
精密整流电路有很多种,各有优缺点,这一款算是较实用的,在一些产品中可以看到它的踪影。 最近一个产品需要用到,仿真了一下,感觉效果不错,推荐给大家。 原理图: 仿真结果:不愧是精密整流,在30mV输入时,表现还相当不错... ...… 查看全部问答> |




