Вт дек 10, 2013 15:00:55
USART->CR1 =USART_CR1_TE|USART_CR1_RE |USART_CR1_RXNEIE;
USART1->CR2 &= ~USART_CR2_STOP;
NVIC_SetPriority(USART1_IRQn, 15);
NVIC_EnableIRQ(USART1_IRQn);
USART->CR1 =USART_CR1_UE ;
Bits 13:12STOP[1:0]: STOP bits
These bits are used for programming the stop bits.
00: 1 stop bit
01: Reserved.
10: 2 stop bits
11: 1.5 stop bit
This bit field can only be written when the USART is disabled (UE=0)
Пт фев 05, 2016 19:27:46
Kvasshtain писал(а):Здравствуйте уважаемый Dosikus. Рад Вас видеть . У меня STM32F051. Не ясно что записывать в AFR[1], и как это делать для других случаев. Т.е. я не понимаю откуда взялось число 0x0110, ну или по другому (1<<(2*4))|(1<<(1*4))?
Вт фев 09, 2016 20:09:05
Вт фев 09, 2016 20:39:01
Вт фев 09, 2016 20:47:38
godz320 писал(а):для удобства
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
{
uint32_t temp = 0x00;
uint32_t temp_2 = 0x00;
temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
// GPIO_PinAFConfig(GPIOA, 13, 5);
}
Вт фев 09, 2016 20:54:38
Вт фев 09, 2016 21:02:27
HHIMERA писал(а): выдрать из СПЛ... да и все дела...
Вт фев 09, 2016 21:04:47
Вт фев 09, 2016 21:23:34
AFR 32 битные
а ты предоставил 16 битное значение.
Посмотри в RM описание AFR и приведи свое число к 32 битам и все станет на свои места
Вт фев 09, 2016 21:37:49
Ср фев 10, 2016 11:46:51
зачем выдирать из спл ?выдрать из СПЛ... да и все дела...
Ср фев 10, 2016 12:03:55
Вс апр 22, 2018 14:35:13
// ======= Init SPI2 =======
void Init_USART1 (void)
{
// PA9 -> USART1_TX, PA10 - USART1_RX
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // Enable Clock USART1
RCC->APB2ENR |= RCC_AHBENR_GPIOAEN; // Enable Clock GPIOA
GPIOA->MODER |= GPIO_MODER_MODER9_1; // PA9 (TX) - Alternate function mode
GPIOA->MODER |= GPIO_MODER_MODER10_1; // PA10 (RX) - Alternate function mode
GPIOA->AFR[1] |= 0x0110; // Alternate function at AF1
GPIOA->OTYPER = 0; // Output push-pull
GPIOA->PUPDR = 0; // No pull-up, no pull-down
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9; // PA9 (TX) - High speed
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10; // PA10 (RX) - High speed
RCC->CFGR3 &= ~RCC_CFGR3_USART1SW; // Set System Clock (SYSCLK) USART1
RCC->CFGR3 |= RCC_CFGR3_USART1SW_0;
// USART1->BRR = 0x681; //Скорость обмена 9600
USART1->BRR = 0x3FFF;
// USART1->BRR = 0xFFFF;
USART1->CR1 &= ~USART_CR1_M; //Данные - 8 бит
USART1->CR2 &= ~USART_CR2_STOP; //1 стоп-бит
USART1->CR1 |= USART_CR1_RE; // Enable Receiver
USART1->CR1 |= USART_CR1_TE; // Enable Transmitter
USART1->CR1 |= USART_CR1_RXNEIE; // RX Complete Interrupt Enable
USART1->CR1 |= USART_CR1_TCIE; // Transmission Complete Interrupt Enable
// USART1->CR1 |= USART_CR1_TXEIE; // Transmitter Empty Interrupt Enable
USART1->CR1 |= USART_CR1_UE; // Enable USART1
NVIC_EnableIRQ (USART1_IRQn); // Enable Interrupt USART1
USART1->TDR = 0x55; // Begin Transmitte
}
// ===== USART1 TX Empty Interrupt =======
void USART1_IRQHandler (void)
{
if (USART1->ISR & USART_ISR_RXNE) // Read data register not empty
{
char USART1_Data = USART1->RDR;
if (CntRXUSART1++ & 0xF0) { LEDBLUE_DIS; }
else { LEDBLUE_EN; }
}
if (USART1->ISR & USART_ISR_TC) // Transmission complete
{
USART1->TDR = 0x55;
if (CntTXUSART1++ & 0xF0) { LEDGREEN_DIS; }
else { LEDGREEN_EN; }
}
}
Вс апр 22, 2018 15:09:26
Вс апр 22, 2018 16:11:09
Вс апр 22, 2018 21:59:21
RCC->APB2ENR |= RCC_AHBENR_GPIOAEN;
Пн апр 23, 2018 08:31:06
RCC->APB2ENR |= RCC_AHBENR_GPIOAEN;
Ср дек 19, 2018 11:33:27
int main(void)
{
// System Initialization
SystemCoreClockUpdate();
/* Initialize RTOS */
osKernelInitialize(); // Initialize CMSIS-RTOS
// PORTA, PORTC AHB peripheral clock enable register (RCC_AHBENR) for GPIOs, DMA
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
// Initialize USART1 Interface
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
RCC->CFGR3 &= ~RCC_CFGR3_USART1SW;
RCC->CFGR3 |= RCC_CFGR3_USART1SW; //HSI selected as USART1 clock
// TX
GPIOA->MODER |= _VAL2FLD(GPIO_MODER_MODER9, 0x2);
GPIOA->OTYPER &= ~GPIO_OTYPER_OT_9; // Reset bit
GPIOA->PUPDR |= _VAL2FLD(GPIO_PUPDR_PUPDR9, GPIO_PuPd_DOWN);
GPIOA->OSPEEDR |= _VAL2FLD(GPIO_OSPEEDR_OSPEEDR9, GPIO_Speed_Level_3);
GPIOA->AFR[1] |= _VAL2FLD(GPIO_AFRH_AFSEL9, 0x1);
// RX
GPIOA->MODER |= _VAL2FLD(GPIO_MODER_MODER10, 0x0);
GPIOA->PUPDR |= _VAL2FLD(GPIO_PUPDR_PUPDR10, GPIO_PuPd_NOPULL);
GPIOA->OSPEEDR |= _VAL2FLD(GPIO_OSPEEDR_OSPEEDR10, GPIO_Speed_Level_3);
GPIOA->AFR[1] |= _VAL2FLD(GPIO_AFRH_AFSEL10, 0x1);
USART1->BRR = 0x46;
USART1->CR1 |= USART_CR1_UE;
USART1->CR1 &= ~USART_CR1_M; //Данные - 8 бит
USART1->CR2 &= ~USART_CR2_STOP; //1 стоп-бит
USART1->CR1 |= USART_CR1_TE;
USART1->CR1 |= USART_CR1_RE;
USART1->CR1 |= USART_CR1_RXNEIE;
NVIC_EnableIRQ(USART1_IRQn);
/* Initialize output PC8 (blue LED) */
osThreadNew(app_main, NULL, NULL); // Create application main thread
osThreadNew(gsm_power, NULL, NULL); // Create GSM Power thread
osThreadNew(onoff_key, NULL, NULL); // Create onoff key monitoring thread
osThreadNew(usart1_thread, NULL, NULL); // Create onoff key monitoring thread
osKernelStart(); // Start thread execution
for (;;) {}
// for(;;){
// // Read input state of button PA0
// if(GPIOA->IDR & GPIO_IDR_0){
// //GPIOB->BSRR |= GPIO_BSRR_BR_8;
// }else{
// //GPIOB->BSRR |= GPIO_BSRR_BS_8;
// }
// }
}
/***********************************/
/*** прерывание по приему данных ***/
/***********************************/
volatile unsigned int usart_temp;
void USART1_IRQHandler(void)
{
if((USART1->ISR & USART_ISR_RXNE)!=0)
{
usart_temp = USART1->RDR;
}
}
Ср дек 19, 2018 11:36:56
extern "C" void USART1_IRQHandler()
{
//...
}
Вс янв 13, 2019 16:20:40
uint8_t ReadByte(USART_TypeDef* USARTx){
while(!(USARTx->ISR & USART_ISR_RXNE)){};
return USARTx->RDR;
}
int main(){
InitDriverUsart(USART1,7600,NOT_REMAP);
while(1){
ReadByte(USART1);
ReadByte(USART1);
ReadByte(USART1);
ReadByte(USART1);
ReadByte(USART1);
ReadByte(USART1);
NOP;
}
}