【STM32CubeMX】4,基于CubeMX的串口调试

1,这个很详细,我就是在这里修改测试的

http://bbs.21ic.com/icview-1245612-1-1.html

全局变量两个

uint8_t aTxBuffer[] = "** UART__ComPolling ** \r\n";

uint8_t aRxBuffer[32];

【STM32CubeMX】4,基于CubeMX的串口调试_第1张图片【STM32CubeMX】4,基于CubeMX的串口调试_第2张图片

【STM32CubeMX】4,基于CubeMX的串口调试_第3张图片


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配置如下

【STM32CubeMX】4,基于CubeMX的串口调试_第4张图片

【STM32CubeMX】4,基于CubeMX的串口调试_第5张图片【STM32CubeMX】4,基于CubeMX的串口调试_第6张图片

完美运行

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);
}

在中断回调函数中加入延时出问题,会长期停在一个状态不退出。红灯长亮

【STM32CubeMX】4,基于CubeMX的串口调试_第7张图片


3.stm32 hal 串口读取接收的数据

1、初步配置全局变量

【STM32CubeMX】4,基于CubeMX的串口调试_第8张图片

2、在while中加入接收中断


3、在接收回调函数中做控制

【STM32CubeMX】4,基于CubeMX的串口调试_第9张图片

4、把if放到while下也是完美运行的。

要注意ASCII码的转换,当我输入2时,读取的是十进制数2,其ASCII的数值为50.用printf实际输出的十进制数是50

【STM32CubeMX】4,基于CubeMX的串口调试_第10张图片

【STM32CubeMX】4,基于CubeMX的串口调试_第11张图片

5,采用16进制发送,读取16进制,就不用ASCII转换了

【STM32CubeMX】4,基于CubeMX的串口调试_第12张图片

6、在设置PWM时,注意单位的统一。

0X2345=9029

【STM32CubeMX】4,基于CubeMX的串口调试_第13张图片


7,只是简单的转换一下0X2345到2345d。完美运行。

【STM32CubeMX】4,基于CubeMX的串口调试_第14张图片



你可能感兴趣的:(01-STM32MXCube)