Неполучается уже второй день запустить USART на STM32L-DISCOVERY Среда Coocox
Логическим анализатором смотрю нету ничего...
РА 2Tx
PA 3Rx
КОД:
CODE
#include "stm32l1xx_gpio.h"
#include "stm32l1xx_rcc.h"
#include "stm32l1xx.h"
#include "misc.h"
#include "stm32l1xx_usart.h"
void Usart1_Transmit(uint8_t); //Объявление функции передачи символа через USART
void Usart1_Transmit_str(char* str); //Объявление функции передачи строки через USART
void usart(void);
void RCC_Configuration(void)
{
SystemInit(); // Сброс по умолчанию
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOC);
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOE);
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD |
RCC_AHBPeriph_GPIOE, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOAEN, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIODEN, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN, ENABLE);
}
void init_led()
{
GPIO_InitTypeDef PORT;
PORT.GPIO_Pin = (GPIO_Pin_7 | GPIO_Pin_6);
PORT.GPIO_Mode = GPIO_Mode_OUT;
PORT.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init( GPIOB , &PORT);
}
void init_but()
{
GPIO_InitTypeDef BUTA;
BUTA.GPIO_Pin = GPIO_Pin_0;
BUTA.GPIO_Mode = GPIO_Mode_IN;
BUTA.GPIO_Mode = GPIO_PuPd_NOPULL;
BUTA.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init( GPIOA , &BUTA);
GPIO_InitTypeDef BUTD;
BUTD.GPIO_Pin = GPIO_Pin_2;
BUTD.GPIO_Mode = GPIO_Mode_IN;
BUTD.GPIO_Mode = GPIO_PuPd_UP;
BUTD.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init( GPIOD , &BUTD);
}
void usart()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //Включаем тактирование USART1
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); //Rx
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); //Tx
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = (GPIO_Pin_2); //Настройки будут производится для вывода PA2 TX
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //Режим альтернативной функции
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //Выход Push-Pull
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //Выход без подтягивающих резисторов
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; //Скорость порта максимальная
GPIO_Init(GPIOA, &GPIO_InitStruct); //Заданные настройки сохраняем в регистрах GPIOА
GPIO_InitStruct.GPIO_Pin = (GPIO_Pin_3); //Настройки будут производится для вывода PA3 //Rx
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //Режим альтернативной функции
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //Режим альтернативной функции
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //Выход без подтягивающих резисторов
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; //Скорость порта максимальная
GPIO_Init(GPIOA, &GPIO_InitStruct); //Заданные настройки сохраняем в регистрах GPIOА
//Инициализация USART1
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = 9600; //Скорость обмена 9600 бод
USART_InitStruct.USART_WordLength = USART_WordLength_8b; //Длина слова 8 бит
USART_InitStruct.USART_StopBits = USART_StopBits_1; //1 стоп-бит
USART_InitStruct.USART_Parity = USART_Parity_No ; //Без проверки четности
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Без аппаратного контроля
USART_InitStruct.USART_Mode = USART_Mode_Tx ; //Включен только передатчик USART1
USART_Init(USART2, &USART_InitStruct); //Заданные настройки сохраняем в регистрах USART1
USART_Cmd(USART2, ENABLE); //Включаем USART1
}
void Usart1_Transmit(uint8_t data)
{
while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи
USART2->DR = data;
}
void Usart1_Transmit_str(char* str)
{
uint8_t i=0;
while(str[i])
{
Usart1_Transmit(str[i]);
i++;
}
Usart1_Transmit('n');
Usart1_Transmit('r');
}
int main(void)
{
RCC_Configuration();
init_led();
init_but();
usart();
int i=0;
while(1)
{
Usart1_Transmit_str('STM32L-DISCOVERY'); //Вызов функции передачи строки через USART
for(i=0; i<1000; i++); //Временная задержка
}
}
#include "stm32l1xx_rcc.h"
#include "stm32l1xx.h"
#include "misc.h"
#include "stm32l1xx_usart.h"
void Usart1_Transmit(uint8_t); //Объявление функции передачи символа через USART
void Usart1_Transmit_str(char* str); //Объявление функции передачи строки через USART
void usart(void);
void RCC_Configuration(void)
{
SystemInit(); // Сброс по умолчанию
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOC);
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOE);
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB |
RCC_AHBPeriph_GPIOC | RCC_AHBPeriph_GPIOD |
RCC_AHBPeriph_GPIOE, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOAEN, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIODEN, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN, ENABLE);
}
void init_led()
{
GPIO_InitTypeDef PORT;
PORT.GPIO_Pin = (GPIO_Pin_7 | GPIO_Pin_6);
PORT.GPIO_Mode = GPIO_Mode_OUT;
PORT.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init( GPIOB , &PORT);
}
void init_but()
{
GPIO_InitTypeDef BUTA;
BUTA.GPIO_Pin = GPIO_Pin_0;
BUTA.GPIO_Mode = GPIO_Mode_IN;
BUTA.GPIO_Mode = GPIO_PuPd_NOPULL;
BUTA.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init( GPIOA , &BUTA);
GPIO_InitTypeDef BUTD;
BUTD.GPIO_Pin = GPIO_Pin_2;
BUTD.GPIO_Mode = GPIO_Mode_IN;
BUTD.GPIO_Mode = GPIO_PuPd_UP;
BUTD.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init( GPIOD , &BUTD);
}
void usart()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //Включаем тактирование USART1
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); //Rx
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); //Tx
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = (GPIO_Pin_2); //Настройки будут производится для вывода PA2 TX
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //Режим альтернативной функции
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //Выход Push-Pull
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //Выход без подтягивающих резисторов
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; //Скорость порта максимальная
GPIO_Init(GPIOA, &GPIO_InitStruct); //Заданные настройки сохраняем в регистрах GPIOА
GPIO_InitStruct.GPIO_Pin = (GPIO_Pin_3); //Настройки будут производится для вывода PA3 //Rx
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //Режим альтернативной функции
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //Режим альтернативной функции
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; //Выход без подтягивающих резисторов
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; //Скорость порта максимальная
GPIO_Init(GPIOA, &GPIO_InitStruct); //Заданные настройки сохраняем в регистрах GPIOА
//Инициализация USART1
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = 9600; //Скорость обмена 9600 бод
USART_InitStruct.USART_WordLength = USART_WordLength_8b; //Длина слова 8 бит
USART_InitStruct.USART_StopBits = USART_StopBits_1; //1 стоп-бит
USART_InitStruct.USART_Parity = USART_Parity_No ; //Без проверки четности
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Без аппаратного контроля
USART_InitStruct.USART_Mode = USART_Mode_Tx ; //Включен только передатчик USART1
USART_Init(USART2, &USART_InitStruct); //Заданные настройки сохраняем в регистрах USART1
USART_Cmd(USART2, ENABLE); //Включаем USART1
}
void Usart1_Transmit(uint8_t data)
{
while(!(USART2->SR & USART_SR_TC)); //Ждем установки флага TC - завершения передачи
USART2->DR = data;
}
void Usart1_Transmit_str(char* str)
{
uint8_t i=0;
while(str[i])
{
Usart1_Transmit(str[i]);
i++;
}
Usart1_Transmit('n');
Usart1_Transmit('r');
}
int main(void)
{
RCC_Configuration();
init_led();
init_but();
usart();
int i=0;
while(1)
{
Usart1_Transmit_str('STM32L-DISCOVERY'); //Вызов функции передачи строки через USART
for(i=0; i<1000; i++); //Временная задержка
}
}