main.c
Код: Выделить всё
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "misc.h"
#include "stm32f10x_tim.h"
ErrorStatus HSEStartUpStatus;
//*************************************************************************
//RCC Setting
//*************************************************************************
void RCC_Configuration(void){
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK*/
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK*/
RCC_PCLK1Config(RCC_HCLK_Div1);
//ADC CLK
RCC_ADCCLKConfig(RCC_PCLK2_Div2);
/* PLLCLK = 8MHz * 6 = 24 MHz */
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_6);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08) {}
}
}
//*************************************************************************
//INTERRUPTS stting
//*************************************************************************
void Interrupt_timer(){
// TIM_TimeBaseStructInit(&base_timer);
TIM_TimeBaseInitTypeDef base_timer;
TIM_TimeBaseStructInit(&base_timer);
base_timer.TIM_Prescaler = 24000 - 1;
base_timer.TIM_CounterMode = TIM_CounterMode_Up;
base_timer.TIM_Period = 100;
TIM_TimeBaseInit(TIM4, &base_timer);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM4, ENABLE);
__enable_irq();
NVIC_EnableIRQ(TIM4_IRQn);
}
//*************************************************************************
//GLOBAL VARIABLES
//*************************************************************************
GPIO_InitTypeDef GPIO_Set; //variable for Setting gpio
uint32_t u = 0;
uint32_t i = 0;
uint16_t delay_counter=0;
//*************************************************************************
//SYS_TICK & DELAY Settings
//*************************************************************************
void SysTick_Handler(void)
{
if (delay_counter>0)
{
delay_counter--;
}
}
void delay_ms(uint16_t delay_temp)
{
delay_counter=delay_temp;
while(delay_counter);
}
//*************************************************************************
//GPIO Settings
//*************************************************************************
//TX
void GPIO_Setting(void){
GPIO_Set.GPIO_Pin = GPIO_Pin_9;
GPIO_Set.GPIO_Speed = GPIO_Speed_10MHz; //set speed port - 10MHz
GPIO_Set.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_Set);
}
//*************************************************************************
//CAN global Settings
//*************************************************************************
void CAN_Setting(){
CAN_InitTypeDef CAN_Set;
CAN_Set.CAN_Prescaler = 6;
CAN_Set.CAN_Mode = CAN_OperatingMode_Normal;
CAN_Set.CAN_SJW = CAN_SJW_1tq; //500kbps
CAN_Set.CAN_BS1 = CAN_BS1_10tq;
CAN_Set.CAN_BS2 = CAN_BS2_5tq;
CAN_Set.CAN_TTCM = DISABLE;
CAN_Set.CAN_ABOM = DISABLE;
CAN_Set.CAN_AWUM = DISABLE;
CAN_Set.CAN_NART = DISABLE;
CAN_Set.CAN_RFLM = DISABLE;
CAN_Set.CAN_TXFP = DISABLE;
CAN_Init(CAN1, &CAN_Set);
}
//*************************************************************************
//CAN Tx message Settings
//*************************************************************************
void CAN_TxMSG(void){
CanTxMsg msg;
msg.StdId = 0xA1;
msg.ExtId = 0x1234;
msg.IDE = CAN_ID_STD;
msg.RTR = CAN_RTR_DATA;
msg.DLC = 8;
msg.Data[0] = 11;
msg.Data[1] = 51;
msg.Data[2] = 52;
msg.Data[3] = u;
msg.Data[4] = 54;
msg.Data[5] = 50;
msg.Data[6] = 56;
msg.Data[7] = u;
CAN_Transmit(CAN1, &msg);
}
//*************************************************************************
//CAN Rx message Settings
//*************************************************************************
//*************************************************************************
//MAIN
//*************************************************************************
int main()
{
RCC_Configuration();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); //
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //
GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE); //
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //
GPIO_Setting();
//SysTick_Config(SystemCoreClock/1000);
CAN_Setting();
Interrupt_timer();
while(1){
// CAN_TxMSG();
/// delay_ms(5);
//u++;
//CAN1 -> RF0R |= CAN_RF0R_RFOM0;
}
}
//*************************************************************************
//INTERRUPTS - 1
//*************************************************************************
void TIM4_IRQHandler(void){
TIM4->SR &= ~TIM_SR_UIF;
CAN_TxMSG();
//delay_ms(500);
u++;
CAN1 -> RF0R |= CAN_RF0R_RFOM0;
}