1,这个很详细,我就是在这里修改测试的
http://bbs.21ic.com/icview-1245612-1-1.html
全局变量两个
uint8_t aTxBuffer[] = "** UART__ComPolling ** rn";
uint8_t aRxBuffer[32];
while(HAL_UART_Receive(&huart1, (uint8_t *)aRxBuffer,3, 1000) != HAL_OK)
{//串口调试软件每次发送6个字符过来,但是单片机的接收端口设置为每次接收3个字符,
//所以可以看到在接收窗口只显示123
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}
if(HAL_UART_Transmit(&huart1,(uint8_t *)aRxBuffer,sizeof(aRxBuffer),1000) == HAL_OK)
{
//将aRxBuffer的接收数据上传到串口调试软件窗口,因为在前面只接收了123,但此次上传大小为32位,
//所以 剩余补0
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
}
HAL_Delay(1000);
2,采用中断,按下不同的按键来点亮不同的LED,HAL配置如下
完美运行
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_13)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
else if(GPIO_Pin==GPIO_PIN_0)
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
}
在中断回调函数中加入延时出问题,会长期停在一个状态不退出。红灯长亮
3.stm32 hal 串口读取接收的数据
1、初步配置全局变量
2、在while中加入接收中断
3、在接收回调函数中做控制
4、把if放到while下也是完美运行的。
要注意ASCII码的转换,当我输入2时,读取的是十进制数2,其ASCII的数值为50.用printf实际输出的十进制数是50
5,采用16进制发送,读取16进制,就不用ASCII转换了
6、在设置PWM时,注意单位的统一。
0X2345=9029
7,只是简单的转换一下0X2345到2345d。完美运行。
上一篇:STM32CubeMX开发stm32f103rbt6 CAN例程(二)
下一篇:STM32CUBEMX HAL库 趟坑记
推荐阅读最新更新时间:2024-11-09 16:06
设计资源 培训 开发板 精华推荐
- 使用 NXP Semiconductors 的 MCZ33742 的参考设计
- 具有 400mA 突发钳位、fSW = 1MHz 同步降压型稳压器的 LTC3621EDCB-5 2.5V Vout 的典型应用
- 使用 Richtek Technology Corporation 的 RT7281 的参考设计
- AR0141CS2C00SUEAH3-GEVB:1 MP Sunex DSL945D 1/4" iBGA CIS HB
- CY8CMBR3102 触摸屏多传感器类型的典型应用
- 台式计算机/服务器/工作站的模拟放大
- 使用 BFP405 在 1.9GHz 频率下具有良好 IP3out 性能的低噪声放大器
- 使用 Integrated Silicon Solution Inc 的 IS31AP4915-QFLS2-TR 的参考设计
- MIC5318 高性能 300mA Cap ULDO 典型应用
- 【训练营_进阶班】智能家居-风扇控制