高中生
最后登录1970-1-1
在线时间 小时
注册时间2021-10-21
|
本帖最后由 嵌入式小明 于 2022-3-6 15:22 编辑
视频地址【单片机】野火STM32F103教学视频 (配套霸道/指南者/MINI)【全】(刘火良老师出品) (无字幕)_哔哩哔哩_bilibili 5分50秒之前的内容我所有的代码都照着老师的程序敲的,该cv的就跟着cv,他敲的我也照着敲,串口也是一样的设置,但是,具体看下面的实验现象吧。
具体代码如下:
- //bsp_usart.c程序,跟着老师在配套例程里面copy而来
- #include "bsp_usart.h"
- static void NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* 嵌套向量中断控制器组选择 */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
- /* 配置USART为中断源 */
- NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
- /* 抢断优先级*/
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- /* 子优先级 */
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- /* 使能中断 */
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- /* 初始化配置NVIC */
- NVIC_Init(&NVIC_InitStructure);
- }
- void USART_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- USART_InitTypeDef USART_InitStructure;
- // 打开串口GPIO的时钟
- DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
-
- // 打开串口外设的时钟
- DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
- // 将USART Tx的GPIO配置为推挽复用模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
- // 将USART Rx的GPIO配置为浮空输入模式
- GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
-
- // 配置串口的工作参数
- // 配置波特率
- USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
- // 配置 针数据字长
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- // 配置停止位
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- // 配置校验位
- USART_InitStructure.USART_Parity = USART_Parity_No ;
- // 配置硬件流控制
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- // 配置工作模式,收发一起
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- // 完成串口的初始化配置
- USART_Init(DEBUG_USARTx, &USART_InitStructure);
-
- // 串口中断优先级配置
- NVIC_Configuration();
-
- // 使能串口接收中断
- USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);
-
- // 使能串口
- USART_Cmd(DEBUG_USARTx, ENABLE);
- }
- /********以下是跟着老师敲的**********/
- //发送一个字节数据
- void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data)
- {
- USART_SendData(pUSARTx, data);
- while( USART_GetFlagStatus(pUSARTx, USART_FLAG_RXNE) == RESET);
- }
- /********我感觉如果要出问题的话,应该也是在下面这个程序出问题,但是我真的是跟着敲的,前后对比都没有错**/
复制代码- //bsp_usart.h头文件程序,这个也是跟着老师在配套例程里面copy的
- #ifndef __BSP_USART_H
- #define __BSP_USART_H
- #include "stm32f10x.h"
- #define DEBUG_USARTx USART1
- #define DEBUG_USART_CLK RCC_APB2Periph_USART1
- #define DEBUG_USART_APBxClkCmd RCC_APB2PeriphClockCmd
- #define DEBUG_USART_BAUDRATE 115200
- // USART GPIO 引脚宏定义
- #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOA)
- #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd
-
- #define DEBUG_USART_TX_GPIO_PORT GPIOA
- #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_9
- #define DEBUG_USART_RX_GPIO_PORT GPIOA
- #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_10
- #define DEBUG_USART_IRQ USART1_IRQn
- #define DEBUG_USART_IRQHandler USART1_IRQHandler
- void USART_Config(void);
- void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data);
- void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data);
- #endif /* __BSP_USART_H */
复制代码- //main.c程序,跟着老师敲的
- #include "stm32f10x.h"
- #include "bsp_led.h"
- #include "bsp_usart.h"
- int main(void)
- {
- USART_Config();
复制代码 老师的使用的下载器下载的程序,我用的是串口下载的程序,老师按下复位键之后的实验现象如下:
我按下复位键之后,只显示了字符A,如下
麻烦大家了,
|
|