
最近刚刚接触stm8,在使用串口的时候,死活的调试不通,请教万能的大神们 串口配置 void Uart1_Init(void) { CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);//TXD GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_In_PU_No_IT);//RXD GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2, ENABLE); GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_3, ENABLE); USART_DeInit(USART1); //复位UART1 /* * 将UART1配置为: * 波特率 = 115200 * 数据位 = 8 * 1位停止位 * 无校验位 * 使能接收和发送 */ USART_Init(USART1, (u32)9600, USART_WordLength_8b, USART_StopBits_1, USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx); USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断 USART_ITConfig(USART1, USART_IT_TC, ENABLE);//开启接收中断 USART_Cmd(USART1, ENABLE); //使能UART2 } main() { CLK_HSICmd(ENABLE); CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI); while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET); CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); Uart1_Init(); while(1) { Delay_ms(20); USART_SendData8(USART1, 0xfb);//在进入这个函数时经常提示 参数无效,而且数据寄存器中一直都是0x00,而且直接给该寄存器写值也写不进去 while(SART_GetFlagStatus( USART1, USART_FLAG_TC) == RESET); } } 代码就这么点,但就是没有数据,而且直接给USART1-DR赋值也没用, |
STM8S003无法检测到引脚电平
STM8 @svlreg 问题
STM8AF62XX+L99PM62GXP LIN通讯的电路原理图有吗?官网提供了一套软件,没找到对应的原理图,请大家指教一下
求一个STM8S207例程
初次接触STM8,请问在STVD中,为什么这个Struct会报错
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
#include "stm8l15x.h"
#include "stdio.h"
/** @addtogroup STM8L15x_StdPeriph_Examples
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* define the GPIO port and pins connected to Leds mounted on STM8L152X-EVAL board */
#define LED_GPIO_PORT GPIOB
#define LED_GPIO_PINS GPIO_Pin_7
#define KEY_GPIO_PORT GPIOD
#define KEY_GPIO_PINS GPIO_Pin_2
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void Delay (uint16_t nCount);
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */
/* Private functions ---------------------------------------------------------*/
/**
* @brief Main program.
* @param None
* @retval None
*/
void main(void)
{
uint8_t ans;
/* Config system clock as: HSI @ 16MHz */
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
/* Initialize LEDs mounted on STM8L152X-EVAL board */
GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_High_Fast);
/* Initialize KEYs mounted on STM8L152X-EVAL board */
GPIO_Init(KEY_GPIO_PORT, KEY_GPIO_PINS, GPIO_Mode_In_PU_No_IT);
/* USART configured as follow:
- BaudRate = 115200 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Receive and transmit enabled
- USART Clock enabled
*/
/* Enable USART clock */
CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
/* USART configuration */
USART_Init(USART1, (uint32_t)115200, USART_WordLength_8b, USART_StopBits_1,
USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));
/* Output a message on Hyperterminal using printf function */
printf("\n\rUSART Example: retarget the C library printf() and getchar() functions to the USART\n\r");
printf("\n\rEnter Text: \n\r");
while (1)
{
ans = getchar();
printf("%c", ans);
}
}
/**
* @brief Inserts a delay time.
* @param nCount: specifies the delay time length.
* @retval None
*/
void Delay(__IO uint16_t nCount)
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
}
}
/**
* @brief Retargets the C library printf function to the USART.
* @param[in] c Character to send
* @retval char Character sent
* @par Required preconditions:
* - None
*/
PUTCHAR_PROTOTYPE
{
/* Write a character to the USART */
USART_SendData8(USART1, c);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return (c);
}
/**
* @brief Retargets the C library scanf function to the USART.
* @param[in] None
* @retval char Character to Read
* @par Required preconditions:
* - None
*/
GETCHAR_PROTOTYPE
{
int c = 0;
/* Loop until the Read data register flag is SET */
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
c = USART_ReceiveData8(USART1);
return (c);
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{}
}
#endif
/******************************************************/
楼主拿去研究吧。
评分
查看全部评分
while (1)
{
// ans = getchar();
while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
ans = USART_ReceiveData8(USART1);
printf("%c", ans);
}
改成你这样也不行,有没有其他的什么原因可以造成串口出现这样的问题
void Uart1_Init(void)
{ USART_DeInit(USART1); //复位UART1
CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_Out_PP_High_Fast);//TXD
GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_In_PU_No_IT);//RXD
GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2, ENABLE);
GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_3, ENABLE);
/*
* 将UART1配置为:
* 波特率 = 115200
* 数据位 = 8
* 1位停止位
* 无校验位
* 使能接收和发送
*/
USART_Init(USART1, (u32)9600, USART_WordLength_8b, USART_StopBits_1,
USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx);
}
main()
{
CLK_HSICmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
Uart1_Init();
while(1)
{
Delay_ms(20);
USART_SendData8(USART1, 0xfb);//在进入这个函数时经常提示 参数无效,而且数据寄存器中一直都是0x00,而且直接给该寄存器写值也写不进去
while(SART_GetFlagStatus( USART1, USART_FLAG_TC) == RESET);
}
程序改成这样也还是不行,再查看外设寄存器CLK_PCKENR1->USART1也使能了,当就是没有数据发送,用示波器看该输出的引脚完全没有波形而是一直为高电平
评分
查看全部评分
SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC,ENABLE); //复用PC5,PC6为串口
void Uart1_Init()
{
UART1_DeInit();
UART1_Init((u32)9600,
UART1_WORDLENGTH_8D,
UART1_STOPBITS_1,
UART1_PARITY_NO,
UART1_SYNCMODE_CLOCK_DISABLE,
UART1_MODE_TXRX_ENABLE);//收发模式 波特率9600
//UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);//串口接收中断
UART1_Cmd(ENABLE);//串口打开
}
然后串口就开了。
if((UART1->SR & 0x80)!=0)//TXE =1 发送缓冲空
{//发送缓冲区空
if(message_num)
{
message_num--;
TXREG=Message_pool[message_num];
}
else
{//消息队列结束
if(Data_recived)
{//消息: Got Data!
Data_recived=0;
message_num=10;
Message_pool[9]='G';
Message_pool[8]='o';
Message_pool[7]='t';
Message_pool[6]=' ';
Message_pool[5]='D';
Message_pool[4]='a';
Message_pool[3]='t';
Message_pool[2]='a';
Message_pool[1]='!';
}
else if(OK_flag)
{//消息: Trans Ok
OK_flag=0;
message_num=10;
Message_pool[9]='T';
Message_pool[8]='r';
Message_pool[7]='a';
Message_pool[6]='n';
Message_pool[5]='s';
Message_pool[4]=' ';
Message_pool[3]='O';
Message_pool[2]='K';
Message_pool[1]='!';
}
}
}
主程序添加↑这段,于是当message_num不为0,数据池有数据的时候就发出去了。。
补一个宏定义。
//------------------------
#define TXREG UART1->DR